Có, bạn có thể làm điều này với các ràng buộc.
Trước tiên, bạn cần phải tạo các ràng buộc đối với người giám sát chứ không phải chế độ xem gần nhất. Các khung nhìn lân cận sẽ thay đổi vị trí, vì vậy chúng ta KHÔNG muốn các ràng buộc liên quan đến các khung nhìn khác. Xem ảnh chụp màn hình dưới đây để biết ví dụ về cách thiết lập các ràng buộc.
Tiếp theo, liên kết những hạn chế bạn sẽ được sửa đổi để IBOutlets vì vậy chúng tôi có thể thay đổi chúng theo chương trình. Ví dụ của bạn, đây sẽ là những ràng buộc:
@IBOutlet var greenViewTrailingConstraint: NSLayoutConstraint!
@IBOutlet var greenViewBottomConstraint: NSLayoutConstraint!
@IBOutlet var redViewTopConstraint: NSLayoutConstraint!
@IBOutlet var redViewLeadingConstraint: NSLayoutConstraint!
@IBOutlet var redViewBottomConstraint: NSLayoutConstraint!
@IBOutlet var blueViewTrailingConstraint: NSLayoutConstraint!
@IBOutlet var blueViewTopConstraint: NSLayoutConstraint!
@IBOutlet var blueViewLeadingConstraint: NSLayoutConstraint!
Cuối cùng, cập nhật các hằng số ràng buộc dựa trên UIInterfaceOrientation. Một lần nữa, sử dụng ví dụ của bạn, mã trông giống như sau:
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
let padding: CGFloat = 16.0
// since we're calling this before the rotation, the height and width are swapped
let viewHeight = self.view.frame.size.width
let viewWidth = self.view.frame.size.height
// if landscape
if UIInterfaceOrientationIsLandscape(toInterfaceOrientation) {
greenViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0)
greenViewBottomConstraint.constant = padding
blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0)
blueViewTrailingConstraint.constant = padding
blueViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0)
redViewTopConstraint.constant = padding
redViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0)
redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0)
} else { // else portrait
greenViewBottomConstraint.constant = (viewHeight/2.0) + (padding/2.0)
greenViewTrailingConstraint.constant = padding
blueViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0)
blueViewTrailingConstraint.constant = (viewWidth/2.0) + (padding/2.0)
blueViewLeadingConstraint.constant = padding
redViewLeadingConstraint.constant = (viewWidth/2.0) + (padding/2.0)
redViewBottomConstraint.constant = padding
redViewTopConstraint.constant = (viewHeight/2.0) + (padding/2.0)
}
}
Nguồn
2014-10-20 19:02:09
đẹp giải pháp! ! Tuy nhiên, tôi đã chỉ tự hỏi nếu nó là tốt để thêm và loại bỏ các ràng buộc lập trình trong quá trình xoay thiết bị. –
@RashmiRanjanmallick, Câu hỏi hay! Tuy nhiên, chúng tôi không thêm/xóa các ràng buộc. Chúng tôi chỉ đang sửa đổi các hằng số của chúng. Sửa đổi hằng số ràng buộc là thực tế phổ biến, đặc biệt là trong hoạt ảnh UIView hoặc xoay thiết bị. –
Cảm ơn, tôi tự hỏi tại sao trên trái đất họ không tạo bảng phân cảnh như chọn chế độ dọc và thiết lập bố cục dọc và chọn chế độ ngang và thiết lập bố cục ngang. – fullMoon