2014-09-21 18 views
6

Tôi đang sử dụng bảng phân cảnh và Xcode 6 để thiết kế chế độ xem ứng dụng nhưng tôi đang gặp vấn đề này: Tôi muốn chỉ định các vị trí khác nhau cho các chế độ xem chân dung và phong cảnh. Ví dụ:Quan điểm chân dung/phong cảnh khác nhau trong bảng phân cảnh và nhanh chóng

Portrait Landscape

Kể từ bây giờ tôi đã đạt được điều này lập trình với willRotateToInterfaceOrientation và thanh trạng thái để có được định hướng ipad.

Với Xcode 6, bố cục iPhone cho chân dung và phong cảnh khác nhau, nhưng cũng giống nhau cho iPad (thông thường, thông thường). Có thể đạt được những vị trí đó với những ràng buộc?

Cảm ơn.

Trả lời

7

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.

Constraint Setup

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) 
    } 
} 
+0

đẹ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ị. –

+0

@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ị. –

+0

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

1

Tôi biết đây là một bài cũ, nhưng chỉ dành riêng cho info.I thử các bước dưới đây và nó đang làm việc như mong đợi.

Bước 1. Chọn Xem bộ điều khiển, Chọn bất kỳ từ điều khiển lớp kích thước. Và thêm Chế độ xem ở chế độ này. Any Mode Bước2. Thay đổi chế độ thành chân dung tất cả các iPhone từ điều khiển lớp kích thước, thêm các ràng buộc cho chế độ xem cho chế độ dọc. Potrait mode Bước 3. Tương tự như vậy Thay đổi chế độ để cảnh quan tất cả iPhone, thêm ràng buộc cho chế độ xem cho chế độ ngang.

Xin lưu ý: Các khó khăn là độc lập ngay bây giờ cho chân dung và phong cảnh

0

Nhấn cộng "+" bên cạnh liên tục về một ràng buộc và thêm các biến thể cho các màn hình khác nhau:

enter image description here

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