iOS Autolayout: hai nút có chiều rộng bằng nhau, cạnh nhau


92

Tôi hiện đang gặp khó khăn với Tự động thanh toán. Tôi đang sử dụng trình tạo giao diện và đang cố gắng đặt hai nút có chiều rộng bằng nhau cạnh nhau như được minh họa trong hình ảnh sau.

bố cục khách quan

Từ hình ảnh Xem trước sau đây, titleImage của tôi đã được giới hạn đúng cách và đang hiển thị chính xác tuy nhiên các nút thì không. Tôi đã thử nghiệm bằng cách căn chỉnh nút 1 với cạnh đầu của titleImage và button2 với cạnh cuối của titleImage, tuy nhiên sự phân bố chiều rộng giữa hai nút trở nên lệch tại điểm này, như được minh họa bên dưới.

kịch bản vấn đề

Mục tiêu của tôi là hiểu những ràng buộc nào bị thiếu và nên được áp dụng cho hai nút để duy trì độ rộng bằng nhau bất kể thiết bị nào. Nếu có thể, tôi muốn đạt được điều này thông qua trình tạo giao diện thay vì mã bổ sung.


1
Masonry là một cách được đề xuất để làm điều này thông qua lập trình. Liên kết: github.com/Masonry/Masonry
Itachi

1
đây là liên kết ... bạn có thể kiểm tra ... stackoverflow.com/questions/29620409/...
EI Captain v2.0

Câu trả lời:


246

Thêm các ràng buộc sau

  1. Gán chiều rộng bằng nhau từ button1 đến button2.
  2. Gán khoảng cách ngang giữa cả hai nút.
  3. Gán không gian hàng đầu từ button1 cho superview của nó.
  4. Gán khoảng trắng từ button2 cho superview của nó.
  5. Gán không gian trên cùng cho cả hai nút.
    Hãy cho tôi biết nếu nó làm việc cho bạn.

7
Tuyệt vời - điều này đã làm việc cho tôi. Cụ thể là điểm # 2 - thêm khoảng cách giữa các đường chân trời.
Scratcha

WoW !!! Ý bạn là gì? Nó thực sự hoạt động như một sự quyến rũ, và tôi đã lãng phí khoảng 3 giờ! :( Trong trường hợp của tôi, tôi có hai Chế độ xem có chiều rộng bằng nhau trong Siêu Chế độ xem phân chia nó. Tuy nhiên, cuối cùng nó đã hỏi tôi một điều như "Cần các ràng buộc cho Y hoặc Chiều cao". Tôi đã chọn làm "Thêm các ràng buộc còn thiếu" và nó đã giải quyết được.
Randika Vishman

@Abubakr: Nó chỉ hoạt động với một kích thước màn hình vì cả hai nút đều có cùng chiều rộng.
AG

1
Hoạt động cho nhiều hơn 2 phần tử giao diện người dùng liền kề!
siege_Perilous

1
Vâng, cảm ơn nhưng tôi đã tìm thấy giải pháp và nó tốt hơn trong mã. Đặt bất kỳ một căn giữa nào trong số chúng là căn giữa cho cha mẹ và cung cấp một nửa kích thước nội dung không đổi mà bạn có thể tính toán trong mã hoặc nếu nội dung là tĩnh, bạn có thể chỉ cần cập nhật khung và cập nhật hằng số. cùng với đó cũng thêm một nửa khoảng cách giữa hai nút vào căn giữa đó. Và chỉ cần đưa ra đầu hoặc cuối cho nút khác. Sửa lỗi này cho tôi. Và nếu nội dung của bạn là nội tại và cần cập nhật, chỉ cần gọi phương thức cập nhật bố cục và tính toán lại giá trị không đổi.
Amber K,

79

Làm theo các bước và ảnh chụp màn hình để có giải pháp dễ dàng


Bước 1)

  • Đối với nút 1: Thiết lập chế: (1) Dẫn đầu, (2) Top hay Bottom asper nhu cầu của bạn, (3) Chiều cao


Bước 2)

  • Đối với Nút 2: Đặt Ràng buộc: (1) Theo dõi, (2) Trên hoặc dưới tùy theo nhu cầu của bạn, (3) Chiều cao

Bước 3)

  • Nhấn Ctrl + Kéo Từ Nút 1 đến Nút 2

  • Chọn khoảng cách ngang


Bước 4)

  • Chọn cả hai nút (sử dụng Command) và Thêm các ràng buộc Chiều rộng bằng nhau


ĐẦU RA

Hy vọng nó sẽ giúp bạn :)


1
Chiều cao không nên cố định. Để chế độ xem quyết định chiều cao của nút theo kích thước màn hình.
Kunal Kumar,

@KunalKumar trường hợp này Chiều cao được cố định. bạn có thể vui lòng cho tôi biết bạn muốn gì không?
Vvk

@Vvk ... người anh em hoàn hảo :)
Jaywant Khedkar 21/02/19

18

Bố cục ngăn xếp trong iOS9, sẽ thực hiện công việc thực sự tốt đẹp. Thêm chế độ xem ngăn xếp vào chế độ xem của bạn và định cấu hình như sau:

nhập mô tả hình ảnh ở đây



0

Giải pháp của tôi là

  1. Đặt một khung nhìn nhỏ ở giữa hai nút và đặt nó ở giữa (Tâm nằm ngang trong vùng chứa và tâm dọc trong đối tượng là 0).
  2. Thêm chiều cao và chiều rộng cho chế độ xem nhỏ.
  3. Thêm các nút các ràng buộc và cung cấp các ràng buộc không gian ngang cho chế độ xem nhỏ.
  4. Đặt màu nền cho chế độ xem nhỏ giống như các nút hoặc màu của Chế độ xem.

Lưu ý: Xem Ảnh chụp màn hình.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.