2014-12-30 17 views
21

Cách thiết kế màn hình Chân dung và ngang với các bố cục khác nhau bằng cách sử dụng lớp Kích thước. Tôi chỉ có thể tìm thấy w-regular và h-regular cho cả hai hướng. Ví dụ: Tôi cần phải sắp xếp 2 cửa sổ theo chiều dọc trong bức chân dung và ngang trong bối cảnh sử dụng Kích LớpBố cục màn hình và bố cục chân dung của iPad với Kích thước lớp

+1

Đối với iphone nó có thể tạo 2 bố cục cho các hướng khác nhau bằng cách sử dụng lớp kích thước. Làm thế nào chúng ta có thể đạt được điều này cho iPad bằng cách sử dụng Size Class và Autolayout? –

+0

Bạn đã tìm được giải pháp chưa? Tôi có cùng một vấn đề. – cmii

+3

Thực ra đây là một câu hỏi cụ thể. Và không có Apple nào không thiết kế các lớp kích thước để kích hoạt một lớp kích thước màn hình cụ thể của iPad, điều này hoàn toàn không có ý nghĩa với tôi vì bạn sau đó phải tự giải quyết cảnh quan trong mã. Tôi không đồng ý với một số phương pháp tấn công hệ thống lớp kích thước. Chỉ cần đối phó với nó trong mã. – n8tr

Trả lời

6

Cuối cùng tôi tìm thấy một giải pháp:

if traitCollection.verticalSizeClass == .Regular && traitCollection.horizontalSizeClass == .Regular { 

    var orientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation; 
    if orientation == UIInterfaceOrientation.LandscapeLeft || orientation == UIInterfaceOrientation.LandscapeRight { 
      // orientation is landscape 


    } else { 
      // orientation is portrait 

    } 
} 
6

Nó dường như là ý định của Apple để điều trị cả hai định hướng iPad như giống nhau - - nhưng như một số người trong chúng ta đang tìm kiếm, có rất nhiều lý do thiết kế hợp pháp để muốn thay đổi bố cục UI cho iPad Portrait so với iPad Landscape.

Tuy nhiên, vui lòng xem câu trả lời này cho cách tiếp cận khác để thích ứng với các lớp học quy mô để làm những gì chúng ta cần: https://stackoverflow.com/a/28268200/4517929

+0

Tôi đang phát triển ứng dụng toàn cầu, trong đó tôi đã thử cách tiếp cận của bạn. nó hoạt động tốt cho iPad nhưng khi tôi đặt ràng buộc cho w: Bất kỳ, h: Bất kỳ điều gì tôi nhận được ** Không thể đồng thời đáp ứng các ràng buộc. ** lỗi –

5

Đối Swift 3 nó sẽ trông như thế này:

override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? { 
    if UI_USER_INTERFACE_IDIOM() == .pad && 
     view.bounds.width > view.bounds.height { 

     let collections = [UITraitCollection(horizontalSizeClass: .regular), 
          UITraitCollection(verticalSizeClass: .compact)] 
     return UITraitCollection(traitsFrom: collections) 

    } 

    return super.overrideTraitCollection(forChildViewController: childViewController) 
} 

Nó sẽ sử dụng wRhC thay vì wRhR cho thiết bị iPad ở chế độ ngang. Đặt mã này vào bộ điều khiển chế độ xem cơ sở của bạn, tức là quy tắc này sẽ hoạt động đối với tất cả các trình điều khiển được trình bày bởi bộ điều khiển này. Bạn có thể đặt bất kỳ điều kiện bổ sung ở đây ... Ví dụ, nếu bạn muốn quy tắc này có tác dụng duy nhất cho bộ điều khiển xem cụ thể, nếu điều hành của bạn sẽ trông như thế này:

if UI_USER_INTERFACE_IDIOM() == .pad && 
     childViewController is YourSpecificViewController && 
     view.bounds.width > view.bounds.height { 

     let collections = [UITraitCollection(horizontalSizeClass: .regular), 
          UITraitCollection(verticalSizeClass: .compact)] 
     return UITraitCollection(traitsFrom: collections) 

    } 
+1

Bạn có thể tìm thấy những hậu quả không mong muốn khi thực hiện việc này. Ví dụ, nếu bộ điều khiển khung nhìn này hiển thị một bộ điều khiển dạng phương thức khác như một Form Sheet, nó sẽ hiển thị giống như trên iPhone - toàn màn hình theo chiều dọc - đó có lẽ không phải là thứ bạn muốn. Hơn nữa, trong khi nó đang mở, nếu bạn xoay để cảnh quan nó sẽ trở lại màn hình không đầy đủ, và sẽ ở lại như vậy khi bạn xoay trở lại chân dung. Không phải là một trải nghiệm thú vị. – Michael

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