2015-03-13 14 views
8

NSLayoutConstraint (trong iOS 8.0) có một thuộc tính BOOL được gọi là active giúp dễ dàng vô hiệu hóa/bật hạn chế bố cục được cho phép khi đang di chuyển.Bật/tắt NSLayoutConstraints trong InterfaceBuilder

Để tạo bố cục thứ hai cho bộ điều khiển chế độ xem mà tôi có thể bật/tắt theo chương trình (thông qua IBOutletCollection của NSLayoutConstraints cho cả hai bộ), tôi cần phải tắt các hạn chế bố cục đã được xác định trong trình tạo giao diện.

Hãy để tôi rõ ràng ở đây Tôi KHÔNG muốn xóa chúng, chỉ cần tắt chúng để tôi có thể thiết kế bộ thứ hai mà không cần người xây dựng giao diện phàn nàn mọi lúc về các ràng buộc không khớp. Hơn nữa các lớp kích thước chuyển đổi không phải là một tùy chọn, vì các bộ bố cục có nghĩa là cho một lớp và cùng một lớp kích thước.

Có tùy chọn để làm như vậy không?

Cảm ơn trước

Malte

Thông tin thêm: SDK Version: 8.1Deployment Target 8.0

Trả lời

18

Chọn chế bạn muốn vô hiệu hóa trong kịch bản, và Lựa chọn + lệnh + để hiển thị thuộc tính Thanh tra, sau đó bỏ chọn Đã cài đặt.

+8

Cảm ơn bạn đã làm việc, tôi thực sự bỏ chọn cài đặt sẽ khiến chúng không thể truy cập được trong lớp kích thước này! Cảm ơn rất nhiều! – Malte

+0

Trong Xcode 8, bạn phải chọn tùy chọn "Sử dụng biến thể tra cứu" để bật nó. –

+0

@AmmarMujeeb Bạn làm điều đó ở đâu? – shim

10

Trước đây tôi đã sử dụng giải pháp do Gabbler cung cấp thành công, nhưng gần đây tôi đã thử cùng một điều bằng Swift 2.0 và Xcode 7 và thấy rằng nó không còn hoạt động nữa. Các ràng buộc đã được thiết lập là chưa được cài đặt, như người ta có thể mong đợi, không được cài đặt gì cả và không ảnh hưởng đến bố cục khi bật hoặc tắt.

Giải pháp của tôi cho vấn đề là đảm bảo rằng tất cả các ràng buộc đã được cài đặt và thêm thuộc tính thời gian chạy do người dùng xác định với khóa 'hoạt động', nhập 'boolean' và giá trị 'false'.

Bảng thuộc tính thời gian chạy do người dùng xác định có thể được tìm thấy trong Trình kiểm tra danh tính bên dưới các trường Lớp tùy chỉnh.

+0

Làm việc tốt. Tuy nhiên, bạn vẫn nhận được tất cả các cảnh báo của Trình xây dựng giao diện và các lỗi liên quan đến các ràng buộc xung đột. Tôi tự hỏi tại sao không có hộp kiểm nào được cung cấp cho thuộc tính đang hoạt động có thể giải quyết vấn đề này. – bjornorri

+1

Có, nó không phải là đặc biệt dễ chịu, nhưng tôi không biết một sửa chữa hoàn toàn tuân thủ IB. Hy vọng rằng một phiên bản tương lai của Xcode sẽ nhận ra sự cần thiết cho cài đặt này. – Ash

+1

Bạn luôn có thể đặt mức ưu tiên của ràng buộc được đánh dấu là không hoạt động thành 9999 để tắt tiếng cảnh báo. – bencallis

0

Giải pháp của tôi sử dụng Xcode 8 và Swift 3 mà không nhận được bất kỳ cảnh báo đã được bỏ chọn các cài đặt hộp trên giao diện người xây dựng, Thanh tra tab:

Installed box on Interface builder

Sau đó tạo các IBOutlets và thêm/gỡ bỏ chúng theo chương trình trên viewDidLayoutSubviews()

view.removeConstraints([constraints to remove, ...]) 
view.addConstraints([constraints to add, ...]) 

Hãy chắc chắn để loại bỏ các trở ngại đầu tiên, nếu không bạn sẽ nhận được nhật ký tin nhắn Không thể đồng thời đáp ứng các ràng buộc ...

Các vấn đề liên quan