2015-10-02 16 views
6

Mở ứng dụng iPhone của tôi, tôi có nó giới hạn trong bức chân dung duy nhất dưới các mục tiêu dự án thông tin triển khaisupportedInterfaceOrientations kêu gọi tất cả iPhone trừ 6 +

Có một trang mà tôi muốn chỉ trong cảnh quan và tôi sử dụng các phương pháp để có được supportedInterfaceOrientations cái đó.

thực hiện Tiêu chuẩn:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
     return UIInterfaceOrientationMask.Landscape 
    } 

Nó hoạt động hoàn hảo trên tất cả các thiết bị iPhone và phiên bản iOS trừ iPhone 6+. Phương thức supportedInterfaceOrientations không bao giờ được gọi.

Tôi không thể tìm thấy bất kỳ lý do nào khiến điều này có thể chỉ ảnh hưởng đến iPhone 6+, mọi mẹo sẽ được đánh giá rất nhiều.

+0

Tôi vừa tạo một ứng dụng xem đơn trống và xác minh rằng 'supportedInterfaceOrientations()' được gọi cho cả 6 và 6 Plus. Không thể ngay lập tức thấy mã của bạn sẽ khác như thế nào trừ khi bộ điều khiển xem là bộ điều khiển chế độ xem con cái khác như vc điều hướng, chia vc, thanh tab vc, v.v. Trong trường hợp đó, bộ điều khiển chế độ xem chính cũng phản hồi như bạn muốn. Chỉ có điều khác với 6 Plus ngoài đỉnh đầu của tôi là nó có khả năng sử dụng một cái nhìn phân chia trong cảnh quan. Có lẽ cái gì đó? –

+0

Lý do rất có thể là lớp kích thước cho iPhone 6+ sẽ có chiều rộng thông thường nhưng chiều rộng nhỏ gọn cho tất cả các điện thoại khác khi được trình bày trong landscaoe. Những loại điều khiển là nó: một bộ điều khiển xem bình thường hoặc một container. Nếu nó được trình bày một cách bình thường, tôi tin rằng bạn cần sử dụng 'preferredInterfaceOrientationForPresentation' –

+0

Theo tài liệu,' supportedInterfaceOrientations' sẽ chỉ được gọi trên bộ điều khiển xem gốc, hoặc trên bộ điều khiển được trình bày để chiếm toàn bộ màn hình. Vì vậy, rất có thể là bộ điều khiển bạn đang thực hiện điều này trong iPhone 6+ không đáp ứng các tiêu chí. Loại bộ điều khiển nào?Có vẻ như bạn thường nên thực hiện 'supportedInterfaceOrientations' trong các bộ điều khiển vùng chứa chính như UINavigationController, UITabBarController và UISplitViewController. –

Trả lời

-1

Nhìn vào this question, hãy thử đoạn mã này:

- (NSUInteger) supportedInterfaceOrientations 
{ 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 
    { 
    // iPhone 5S and below: 320x480 
    // iPhone 6: 375x667 
    // iPhone 6 Plus: 414x736 
    CGSize screenSize = [UIScreen mainScreen].bounds.size; 
    // The way how UIScreen reports its bounds has changed in iOS 8. 
    // Using MIN() and MAX() makes this code work for all iOS versions. 
    CGFloat smallerDimension = MIN(screenSize.width, screenSize.height); 
    CGFloat largerDimension = MAX(screenSize.width, screenSize.height); 
    if (smallerDimension >= 400 && largerDimension >= 700) 
     return UIInterfaceOrientationMask.Landscape; 
    else 
     return (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); 
    } 
    else 
    { 
    // Don't need to examine screen dimensions on iPad 
    return UIInterfaceOrientationMask.Landscape; 
    } 
} 

-Herzbube

Thiếu Apple API chính thức, đây là cách giải quyết mà tôi đã đưa ra:

[ Code]

Đoạn mã đơn giản giả định rằng màn hình có kích thước trên một nửa bán tự động kích thước được chọn ngẫu nhiên phù hợp để xoay. Bán tùy tiện, vì ngưỡng 400x700 bao gồm iPhone 6 Plus, nhưng không bao gồm iPhone 6.

Mặc dù giải pháp này khá đơn giản, tôi thích nó chính xác vì thiếu sự tinh tế. Tôi không thực sự cần phải phân biệt chính xác giữa các thiết bị, vì vậy bất kỳ giải pháp thông minh nào như giải pháp trong số Jef's answer là quá mức cần thiết cho mục đích của tôi.

Tất cả những gì tôi đã làm là thay đổi giá trị trả lại thứ nhất và thứ ba từ UIInterfaceOrientationMaskAll thành UIInterfaceOrientationMask.Landscape.

+1

Tôi xin lỗi nhưng có lẽ tôi đã không giải thích rõ ràng câu hỏi. Tôi biết cách triển khai cảnh quan cho thiết bị cụ thể. Vấn đề là supportInterfaceOrientations không được gọi trên các thiết bị iPhone 6+. Đó là 100% vấn đề và nó không chỉ được gọi trên các thiết bị iPhone 6+. – JLoewy

+0

@JLoewy, bạn đang thử nghiệm không có thiết bị thực tế? –

3

bạn có thể thử mã này nó làm việc cho tôi

// you have to import foundation 
import Foundation 

class YourViewController : UIViewController { 
    var device = self.platform() 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(true) 

    if device.lowercaseString.rangeOfString("iphone6plus") != nil { 
    supportedInterfaceOrientations() 
    } 

    } 

    // add this method to your view controller 
    func platform() -> String { 
      var sysinfo = utsname() 
      uname(&sysinfo) // ignore return value 
      return NSString(bytes: &sysinfo.machine, length: Int(_SYS_NAMELEN), encoding: 
       NSASCIIStringEncoding)! as String 
     } 

Xin lưu ý rằng điều này sẽ không chạy trên giả lập nhưng sẽ chạy hoàn hảo trên thiết bị thực tế.

+0

mã này đi đâu? – JLoewy

+0

hey JLoewy tôi đã chỉnh sửa câu trả lời tôi hy vọng nó làm rõ – OverD

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