iphone bar中文 - 有沒有辦法改變UIToolbar的高度?




navigation ios (9)

在iOS 6中,使用autolayout,最簡單的方法是UIToolbar子類,您可以在其中覆蓋instrinsicContentSize 。 這是我的一個應用程序的代碼,工具欄很高。 它的側面和底部照常固定在超視圖的側面和底部。

-(CGSize)intrinsicContentSize {
    return CGSizeMake(UIViewNoIntrinsicMetric, 85);
}

我在Interface Builder中有一個UIToolbar ,我注意到它被鎖定為44px高。 當然我想把它做大。

Apple是否允許調整此控件的大小? 如果是這樣,我該怎麼做呢?


您也可以編輯xib文件:

打開它作為源代碼,找到定義UIToolbar框架的條目,類似於

<string key="NSFrame">{{0,420}, {320,44}}</string>

只需將44的值更改為您需要的任何大小。

這樣工具欄會更高,在InterfaceBuilder中你會看到新的大小變灰,你將無法改變它,但你不需要任何插座或代碼。


在界面構建器中,還可以使用“用戶定義的運行時屬性”。

只需添加一個條目,將keypath設置為“Rect”類型的“frame”,並設置所需的值。


我發現如果我在iPad上設置框架,隱藏/顯示工具欄時會將自身重置回44像素的高度。 我最終不得不重寫UIToolbar並更改方法:

// return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize result = [super sizeThatFits:size];
    result.height = 55;
    return result;
};     

即使使用隱藏/顯示,這也可以正確調整高度。


當然,只需設置不同的框架:

[myToolbar setFrame:CGRectMake(0, 50, 320, 35)];

這將使您的工具欄高35像素。 當然這需要一個IBOutlet或以編程方式創建UIToolbar,但這很容易做到。


對於Xcode 7.1 iOS 9,在自動佈局中,大小鎖定為44px。 Xcode菜單選項Editor> Pin> Height不存在,而是執行以下操作:

在InterfaceBuilder中,單擊工具欄元素以將其選中。 控制+向下拖動工具欄中的任何位置並釋放,彈出菜單將顯示頂部的選項“高度”,選擇它。

您現在有一個高度約束可以使用並根據需要進行調整。


只要您在工具欄上有一個高度限制,就可以使用這個小片段來幫助我調整從UIView繼承的類的高度

-(void)setHeightConstraintTo:(CGFloat)height forView:(UIView *)view{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d",          NSLayoutAttributeHeight];
    NSArray *filteredArray = [view.constraints filteredArrayUsingPredicate:predicate];
    if(filteredArray.count > 0){
        NSLayoutConstraint *constraint = filteredArray.firstObject;
        constraint.constant = height;
    }
 }

Swift解決方案:

myToolbar.frame = CGRect(x: myToolbar.frame.origin.x, y: myToolbar.frame.origin.y, width: myToolbar.frame.size.width, height: 20)

CGRectMake已經過時了。 這可以用CGRect替換。 這會將工具欄的高度設置為20.同樣適用於分段控件。


cellForRow委託中找到最後一個單元cellForRow引,並從下面放入代碼行:

cell.separatorInset = UIEdgeInsetsMake(
    0.f,
    40.0f,
    0.f,
    self.view.frame.size.width-40.0f
);




iphone xcode interface-builder uitoolbar