2011-03-07 26 views
15

Từ Hướng dẫn Human Interface iOS, iOS UI Element Usage GuidelinesUIToolbar chiều cao trên luân chuyển thiết bị

Trên iPhone, có tính đến các thay đổi tự động trong thanh công cụ cao xảy ra trên luân chuyển thiết bị. Trong các đặc điểm cụ thể, hãy đảm bảo các biểu tượng thanh công cụ tùy chỉnh của bạn phù hợp với thanh mỏng xuất hiện ở hướng ngang . Không chỉ định chiều cao của thanh công cụ theo chương trình.

tôi có thể thấy chiều cao thay đổi từ 44 điểm đến 32 điểm trong Thư, Twitter cho iPhoneDropbox ví dụ, nhưng khi tôi thêm một thanh công cụ (với giao diện Builder) và có UIViewController của tôi lớp con để tự động xoay (shouldAutorotateToInterfaceOrientation: trả về CÓ), thanh công cụ không tự động thay đổi chiều cao của nó khi xoay thiết bị.

UIToolbar Class Reference không đề cập đến thay đổi chiều cao tự động này, vì vậy tôi có thể thay đổi nó theo chương trình ngay cả khi HIG nói Không chỉ định chiều cao của thanh công cụ theo chương trình?

Trả lời

15

Theo ghi nhận của yonelGeorge trong các ý kiến ​​từ 7KV7 câu trả lời, thay đổi mặt nạ autoresizing không hoạt động như mong đợi trên iOS 5.

tôi tìm thấy một giải pháp khác bằng cách sử dụng phương pháp -[UIView sizeThatFits:]. Đây là cách tôi đã làm nó:

- (void) layoutForInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Adjust the toolbar height depending on the screen orientation 
    CGSize toolbarSize = [self.toolbar sizeThatFits:self.view.bounds.size]; 
    self.toolbar.frame = (CGRect){CGPointMake(0.f, CGRectGetHeight(self.view.bounds) - toolbarSize.height), toolbarSize}; 
    self.webView.frame = (CGRect){CGPointZero, CGSizeMake(CGRectGetWidth(self.view.bounds), CGRectGetMinY(self.toolbar.frame))}; 
} 

Sau đó, tôi gọi phương thức layoutForInterfaceOrientation: này trong điều khiển điểm của tôi viewWillAppear:willAnimateRotationToInterfaceOrientation:duration: phương pháp.

Chiều cao tuy nhiên đã thay đổi theo lập trình nhưng ít nhất giá trị không được mã hóa cứng.

19

Bạn đã kiểm tra thuộc tính tự động định lại kích thước của thanh công cụ chưa?

+11

Đó là, bạn phải thực hiện 'toolbar.autoresizingMask = toolbar.autoresizingMask | UIViewAutoresizingFlexibleHeight; 'lập trình như Interface Builder không cho phép bạn thay đổi chiều cao linh hoạt! – 0xced

+0

Xin vui lòng chấp nhận câu trả lời nếu nó giúp bạn. Happy coding :) – visakh7

+2

bạn không có tác dụng phụ với iOS5.0 với giải pháp này chưa? Nó hoạt động ok nhưng các biểu tượng trong thanh công cụ luôn luôn có kích thước phong cảnh (= nhỏ hơn), ngay cả ở chân dung:/ – yonel

2

Nếu bạn sử dụng một ViewController bên trong một NavigationController, bạn có thể sử dụng thanh công cụ của NavigationController thay vì tạo thanh công cụ của riêng bạn và để cho nó xử lý thay đổi kích thước. Đây là những gì thuộc tính của ViewController là toolbarItems.

+1

Tôi biết về giải pháp này, nhưng khi bạn đẩy bộ điều khiển xem B vào bộ điều khiển xem A, nếu A không muốn thanh công cụ và B muốn một thanh công cụ, bạn không thể có được một hình ảnh động * đẩy * ngang đẹp mắt. Hoạt hình thanh công cụ là dọc trong khi hoạt ảnh chuyển tiếp đẩy nằm ngang nên trông có vẻ khó xử theo ý kiến ​​của tôi. Không hoạt hình thanh công cụ thậm chí còn tồi tệ hơn. – 0xced

12

Hành vi này đơn giản hơn rất nhiều để đạt được với bố cục tự động. Tôi chỉ được thử nghiệm trong iOS8 nhưng mã sau hoạt động cho tôi với hoạt ảnh mong muốn về thay đổi hướng:

public override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    toolbar.invalidateIntrinsicContentSize() 
} 
+0

Hoạt động tốt trên iOS 9. –

+0

Điều này gần như đã làm việc, tôi phải thêm toolbar.sizeToFit() sau invalidateIntrinsicContentSize(); – C0C0AL0C0

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