2011-03-07 81 views
15

從IOS人機界面指南,iOS UI Element Usage GuidelinesUIToolbar高度上設備旋轉

在iPhone上,考慮到在該設備上旋轉發生工具欄高度 的 自動變化。特別是,在 中,請確保您的自定義 工具欄圖標適合以橫向 方向出現的較薄的 欄。請勿以編程方式指定工具欄的高度 。

我能看到的高度從44點改爲32點郵件Twitter的iPhone的Dropbox例如,但當我添加工具欄(與界面生成器),並有我的UIViewController子類自動旋轉(shouldAutorotateToInterfaceOrientation:返回YES),工具欄在設備旋轉時不會自動更改其高度。

UIToolbar Class Reference沒有提到高度的這種自動變化,所以我應該以編程方式更改它,即使在HIG說不要指定工具欄編程的高度?

回答

15

正如在評論中所指出的yonel喬治7KV7答案,改變了自動尺寸調整掩碼不工作打算在iOS 5

我發現了另一個解決方案通過使用-[UIView sizeThatFits:]方法。這是我如何做的:

- (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))}; 
} 

然後我把這個layoutForInterfaceOrientation:方法在我的視圖控制器viewWillAppear:willAnimateRotationToInterfaceOrientation:duration:方法。

儘管如此,程序仍然改變了高度,但至少該值沒有硬編碼。

19

您是否檢查工具欄的自動調整大小的屬性?

+11

就是這樣,你必須做'toolbar.autoresizingMask = toolbar.autoresizingMask | UIViewAutoresizingFlexibleHeight;'以編程方式作爲Interface Builder不允許你改變靈活高度! – 0xced 2011-03-07 12:47:10

+0

如果它幫助你,請接受答案。快樂編碼:) – visakh7 2011-03-07 12:49:21

+2

這個解決方案對iOS5.0有沒有副作用?它工作正常,但工具欄中的圖標始終具有橫向(=較小)的大小,即使在縱向上:/ – yonel 2011-12-14 13:45:58

2

如果您在NavigationController中使用ViewController,則可以使用NavigationController的工具欄而不是創建自己的,並讓它處理調整大小。實際上,這是ViewController的toolbarItems屬性的用途。

+1

我知道這個解決方案,但是當您將視圖控制器B推到視圖控制器A上時,如果A不需要工具欄和B想要一個工具欄,你不能得到一個不錯的*推*水平動畫。工具欄動畫是垂直的,而推過渡動畫是水平的,所以在我看來這看起來很尷尬。沒有動畫工具欄更糟糕。 – 0xced 2012-08-24 18:44:48

12

這種行爲要實現自動佈局要簡單得多。我只在iOS8上進行測試,但下面的代碼對我的作品與方向變化所需的動畫:

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

在iOS 9上很好用。 – 2015-06-18 09:55:52

+0

這幾乎奏效了,我必須在invalidateIntrinsicContentSize()之後添加toolbar.sizeToFit()。 – C0C0AL0C0 2016-07-03 22:11:56