Liên kết ràng buộc là gì để lề lề trong Storyboard trong Xcode 6


248

Tôi đang làm việc với tính năng tự động thanh toán và các ràng buộc và nhận thấy có một Constrain to marginstùy chọn trong Xcode 6 không có trong Xcode 5 và được kiểm tra theo mặc định.

Tôi đã tạo một dự án thử nghiệm sau đó tôi đã thêm một UITableViewtrên ViewContoder với khung được đặt ở cùng kích thước với chế độ xem và các ràng buộc được thêm vào

Xcode 6 Bạn có thể thấy ở đây mặc dù chế độ xem bảng có cùng khung với chế độ xem Xcode gợi ý thêm -16 làm ràng buộc trong khi Xcode 5 sẽ đề xuất thêm khoảng cách 0.

Đã kiểm tra ràng buộc với lề

Bây giờ khi bạn bỏ chọn tùy chọn "Ràng buộc để ký quỹ", nó hoạt động giống như Xcode 5 và sẽ đề xuất thêm 0 làm ràng buộc

Với ràng buộc để lề UnChecked

Ngoài ra, tôi thấy rằng một khi tôi thêm ràng buộc với Constrain vào lề được kiểm tra, tôi không còn có thể mở tệp bảng phân cảnh trong Xcode 5, vì vậy nó chắc chắn là một cái gì đó mới trong Xcode 6

Hy vọng, tôi có thể giải thích câu hỏi của tôi đúng. Tôi muốn hiểu "Hạn chế lề" thực sự làm gì và khi nào tôi nên và không nên sử dụng nó. Tôi xin lỗi nếu đó là một cái gì đó rất đơn giản và rõ ràng.

BIÊN TẬP

Tôi tìm thấy một cái gì đó về lề bố cục trong cuộc thảo luận ở đây , tôi tự hỏi nếu nó liên quan đến điều này.


15
Không cần phải xin lỗi - không rõ ràng những gì nó làm.
Ben Clayton

4
+1 không cần phải xin lỗi, tôi cũng muốn hỏi câu hỏi này. BTW: để mở bảng phân cảnh trong Xcode5, hãy xem: stackoverflow.com/a/25298909/529243
Olaf

1
Đây là điều gần nhất với một lời giải thích mà tôi đã tìm thấy: stackoverflow.com/questions/25275901/ Khăn
Nathaniel

Làm thế nào để vô hiệu hóa điều này?
orkenstein

2
Vâng đó là nỗi đau thực sự. Tôi đã không thể tìm ra, làm thế nào để bỏ chọn nó vĩnh viễn.
Bhumit Mehta

Câu trả lời:


315

Tôi không hiểu tại sao mọi người phàn nàn rằng " Lợi nhuận sẽ gây ra sự cố hoàn toàn cho bất cứ điều gì trước iOS 8. "

Đặt các ràng buộc của bạn liên quan đến lề trong tệp xib hoặc bảng phân cảnh KHÔNG làm cho ứng dụng của bạn bị sập trên iOS7 và nó cũng không tạo ra sự khác biệt về giao diện người dùng trên thiết bị iOS7 của bạn, miễn là bạn không chạm vào UIView.layoutMarginsUIView.preservesSuperviewLayoutMarginscác thuộc tính trong mã của mình.

Lợi nhuận trong iOS8 là gì

Các lề bố cục thể hiện phần đệm xung quanh phần bên trong của UIViewhệ thống bố cục có thể sử dụng khi bố trí các mục phỏng vấn - để đảm bảo rằng một khoảng trống được để lại giữa cạnh của một khung nhìn và một khung nhìn phụ. Về mặt này, nó rất giống với thuộc tính đệm được liên kết với các khối trong CSS.

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

Theo mặc định, một UIViewlề có bố cục 8 điểm ở mỗi bên và điều này không thể thay đổi trong Trình tạo giao diện . Tuy nhiên, bằng cách đặt thuộc UIView.layoutMarginstính trong mã chỉ có trên iOS8, bạn có thể điều chỉnh các giá trị này.

Bạn có thể nhận IB để hiển thị lề bằng Trình chỉnh sửa> Canvas> Hiển thị hình chữ nhật bố cục: nhập mô tả hình ảnh ở đây

Lợi nhuận có thể được sử dụng để giúp bố trí quan điểm và các cuộc phỏng vấn của bạn. MỗiUIView có lề theo mặc định, nhưng chúng chỉ ảnh hưởng đến vị trí xem khi bạn thiết lập một ràng buộc có liên quan đến lề.

Cách sử dụng Lợi nhuận

Cách duy nhất để sử dụng lề trong Trình tạo giao diện là kiểm tra tùy chọn Relative to lề trong khi định cấu hình các ràng buộc của bạn. Đây là cách bạn hướng ràng buộc của mình vào Sử dụng lề thay vì các cạnh khi bố trí chế độ xem của tôi.

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

Chúng ta hãy xem bốn cách khác nhau để thiết lập một ràng buộc hàng đầu giữa một khung nhìn và khung nhìn của nó. Đối với mỗi ràng buộc, chúng tôi xem xét hiệp hội đầu tiên được mô tả sẽ là đầu mối của nhóm phụthứ hai sẽ là hàng đầu của giám sát . Điều bạn muốn chú ý là trạng thái kiểm tra và bỏ chọn của tùy chọn Relative to lề của mỗi đầu ràng buộc, bởi vì điều đó xác định xem ràng buộc đó có được gắn với lề hoặc cạnh của khung nhìn hay không.

  1. Mục đầu tiên (bỏ chọn), mục thứ hai (kiểm tra): Trong trường hợp này, chúng tôi đang tuyên bố cạnh trái của khung nhìn phụ sẽ căn chỉnh với lề trái của giám sát (như trong hình này).

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

  1. Mục đầu tiên (bỏ chọn), mục thứ hai (bỏ chọn): Cả hai đều sử dụng cạnh, không phải lề . Trong trường hợp này, chúng tôi tuyên bố rằng cạnh trái của khung nhìn phụ sẽ thẳng hàng với cạnh trái của giám sát.

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

  1. Mục đầu tiên (kiểm tra), mục thứ hai (bỏ chọn): Trong trường hợp này, chúng tôi đang tuyên bố rằng lề trái của khung nhìn phụ sẽ phù hợp với cạnh trái của giám sát. Kiểu bố trí này thực sự làm cho các khung nhìn phụ chồng lên giám sát.

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

  1. Mục đầu tiên (kiểm tra), mục thứ hai (kiểm tra). Điều này thực sự có tác dụng tương tự như trường hợp 2, vì cả subview và giám sát đều có cùng một lề mặc định. Chúng tôi đang tuyên bố rằng lề trái của subview sẽ phù hợp với lề trái của giám sát.

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

Điều gì là tốt về lợi nhuận

Tính năng mới này (iOS8) chỉ tác động đến việc phát triển UI nếu bạn quyết định sử dụng lề.

Bằng cách sử dụng lề, bạn có thể điều chỉnh vị trí của nhiều cuộc phỏng vấn có chung mối quan hệ với giám sát được chia sẻ bằng cách thay đổi giá trị của một thuộc tính. Đây là một chiến thắng rõ ràng khi đặt tất cả các ràng buộc liên quan với các giá trị cố định, bởi vì nếu bạn cần cập nhật tất cả các khoảng cách, thay vì thay đổi từng giá trị một, bạn có thể sửa đổi đồng thời tất cả các vị trí có liên quan bằng cách cập nhật lề của giám sát bằng một dòng duy nhất mã như thế này:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

Để minh họa lợi ích này, trong trường hợp sau đây, tất cả các cạnh trái của các cuộc phỏng vấn được căn chỉnh theo lề trái của giám sát của họ. Do đó, việc thay đổi lề trái của giám sát sẽ ảnh hưởng đến tất cả các cuộc phỏng vấn cùng một lúc.

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


Cảm ơn vì lời giải thích chi tiết. Tôi đánh dấu đây là một câu trả lời được chấp nhận vì điều này giải thích mọi thứ độc đáo.
Bhumit Mehta 24/2/2015

Cảm ơn @Bhumit, hy vọng câu trả lời này có ích.
Scott Zhu

4
"Tôi không hiểu tại sao mọi người phàn nàn". Chà, có lẽ hành vi đã thay đổi với một trong những betas cuối cùng, tôi chưa kiểm tra. Nhưng ít nhất một vài tháng trước, nó đã gây ra sự cố ngay cả khi bạn không thử đặt layoutMargins trong mã.
KPM

Thật đáng để chỉ ra rằng khi thêm các ràng buộc mới, các phiên bản Xcode mới hơn cho phép bạn bỏ chọn hộp cho "Ràng buộc với lề" đặt cùng một cờ "Liên quan đến lề". Điều này rất hữu ích vì nó tiết kiệm một vài cú nhấp chuột! Câu trả lời tuyệt vời BTW, vì vậy giải thích tốt và hình ảnh rất hữu ích.
EricWasTaken

Tôi lưu ý rằng những hình ảnh được lưu trữ trên dropbox. Sẽ không tốt hơn để lưu trữ hình ảnh trên SO?
thử nghiệm

63

Trong iOS 8, giờ đây bạn có tùy chọn để xác định các ràng buộc của mình so với lề được xác định trước đối với giới hạn của giám sát, thay vì chính các giới hạn của giám sát. Vâng, nó hoàn toàn liên quan đến lề bố cục mà bạn đã chỉ ra trong các tài liệu. Một lợi thế là bạn có thể xác định lại tỷ suất lợi nhuận của mình một cách linh hoạt hoặc khác nhau cho từng loại thiết bị và bố cục sẽ được cập nhật tương ứng mà không cần sửa đổi các ràng buộc.

Khi nào nên sử dụng nó: khi bạn muốn tận dụng sự linh hoạt mới này.

Khi nào KHÔNG sử dụng nó: cho bất kỳ ứng dụng nào được nhắm mục tiêu chạy trên iOS 7 trở xuống.


21
Đây sẽ là một tính năng hay nếu nó không được bật theo mặc định và gây ra sự cố hoàn toàn đối với mọi thứ trước iOS 8.
TylerJames

1
Không thể đồng ý nhiều hơn.
KPM

42

Tài sản trên UIView là : layoutMargins. Xem Tài liệu Apple . Về cơ bản nếu lề bố cục là 8,8,8,8 (mặc định), ràng buộc với 0 không gian hàng đầu đối với lề container sẽ có vị trí x là 8. Lưu ý rằng điều này chỉ khả dụng trên iOS8 trở lên.

Đối với tất cả những người không muốn các ràng buộc của họ đi đến lề container:

CTRL + nhấp + kéo để hiển thị cửa sổ bật lên tạo ràng buộc.

Nếu menu hiển thị để tạo ràng buộc cho lề theo mặc định, hãy giữ tùy chọn / alt để cho phép ràng buộc được thực hiện đối với vùng chứa chứ không phải lề của vùng chứa.

Bây giờ nó sẽ hiển thị tùy chọn để tạo ràng buộc KHÔNG cho lề. Đây là CÁCH nhanh hơn trong sử dụng của tôi.


3
Đây có lẽ là giải pháp tốt nhất mà tôi đã tìm ra ở đó. Bỏ chọn "constain to lề" không phải lúc nào cũng hoạt động và cảm thấy hơi kỳ diệu. Đây là hoàn hảo.
Levi McCallum

Tại sao trên trái đất là mặc định không 10pt?
ZaBlanc

11
Apple có lịch sử chọn độ dài và kích thước dựa trên nghiên cứu khả năng sử dụng, không phải bằng cách chọn số mà chúng tôi đọc mã có thể thích. Ví dụ: chiều cao mặc định cho nhiều thứ là 44 hoặc 35 pt. @ZaBlanc
Kyle Robson

Giải pháp hoàn hảo khi tôi thêm các ràng buộc vào bảng phân cảnh mà không có lề theo mặc định. Cảm ơn bạn!
inix
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.