You can mix auto layout and manual layout!
Chừng nào none của subviews của view được tham gia vào bất kỳ hạn chế bố trí tự động mà sẽ kích hoạt một bố cục tự động truyền lại quan điểm đó, bạn có thể ghi đè lên layoutSubviews
và thiết lập khung trên mỗi subview bằng tay:
class MyView : UIView {
//
// mySubview is not involved in any constraints
// that would trigger another layout pass.
// e.g., no explicit constraints set in IB.
//
@IBOutlet weak var mySubview: UIView!
override func layoutSubviews() {
super.layoutSubviews() // let auto layout engine run first
//
// Auto layout engine now done with this view so we can
// set the frames how ever we wish since we have the last
// word!
//
mySubview.frame = CGRectMake(...)
...
}
}
lý do làm việc này là sau khi super.layoutSubviews()
được gọi, thay đổi khung trên bất kỳ bản xem nào nào không kích hoạt một đường viền bố cục khác (tất cả các ràng buộc liên quan đến các bản xem trước đều hài lòng và công cụ bố cục tự động được thực hiện với chúng); do đó phương pháp này nhận được từ cuối cùng về vị trí của các bản xem trước của nó!
Đặt nó vào NIB của chính nó có vẻ là giải pháp duy nhất. –
Vâng, bạn không thể bật hoặc tắt nó mỗi cảnh. – Flea
Bạn * có thể * xem xét vị trí theo cách thủ công (tức là đặt khung hình) cho một chế độ xem nhất định miễn là bạn thực hiện * sau * công cụ bố cục tự động được thực hiện với chúng (xem câu trả lời của tôi bên dưới). – wcochran