【发布时间】:2011-01-09 06:36:24
【问题描述】:
我在 Interface Builder 中有一个 UIToolbar,我注意到它被锁定为 44px 高。我当然想让这个更大。
Apple 是否允许调整此控件的大小?如果是这样,我该怎么做?
【问题讨论】:
标签: iphone xcode interface-builder uitoolbar
我在 Interface Builder 中有一个 UIToolbar,我注意到它被锁定为 44px 高。我当然想让这个更大。
Apple 是否允许调整此控件的大小?如果是这样,我该怎么做?
【问题讨论】:
标签: iphone xcode interface-builder uitoolbar
快速解决方案:
myToolbar.frame = CGRect(x: myToolbar.frame.origin.x, y: myToolbar.frame.origin.y, width: myToolbar.frame.size.width, height: 20)
CGRectMake 已过时。这可以替换为CGRect。这会将工具栏的高度设置为 20。同样适用于分段控件。
【讨论】:
对于 Xcode 7.1 iOS 9,在自动布局中,大小锁定为 44px。 Xcode 菜单选项 Editor > Pin > Height 不存在,而是执行以下操作:
在 InterfaceBuilder 中,单击工具栏元素将其选中。 Control+向下拖动工具栏中的任意位置并释放,将显示一个弹出菜单,顶部显示“高度”选项,选择它。
您现在可以使用高度约束并根据需要进行调整。
【讨论】:
只要你在工具栏上有一个高度限制,你就可以使用这个小sn-p,它帮助我调整从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;
}
}
【讨论】:
我不确定 Apple 会如何处理 - 当然这取决于您希望如何使用工具栏 - 但您可以添加默认 UIView 并将其在属性检查器中的类更改为 UIToolbar。这为您免费提供了透明度和可定制性(在本例中为高度),但会牺牲条形按钮项的布局。
【讨论】:
您也可以只编辑 xib 文件:
将其作为源代码打开并找到定义 UIToolbar 框架的条目,类似于
<string key="NSFrame">{{0,420}, {320,44}}</string>
只需将 44 的值更改为您需要的任何大小。
这样工具栏会更高,在 InterfaceBuilder 中你会看到新的尺寸变灰,你将无法改变它,但你不需要任何插座或代码。
【讨论】:
<constraint firstAttribute="height" constant="80" id="fZW-ej-FYO"/>
<rect key="frame" x="0.0" y="0.0" width="187" height="57"/>
在 iOS 6 中,使用自动布局,最简单的方法是 UIToolbar 子类,您可以在其中覆盖 instrinsicContentSize。这是我的一个应用程序的代码,其中工具栏很高。它的侧面和底部像往常一样固定在超级视图的侧面和底部。
-(CGSize)intrinsicContentSize {
return CGSizeMake(UIViewNoIntrinsicMetric, 85);
}
【讨论】:
UIToolbar 上调配了intrinsicContentSize 并返回了我想要的高度。
initWithNavigationBarClass:toolbarClass: 允许您在导航控制器中使用 UIToolbar 子类。
如果这在 SDK 6 中不起作用,可以如下解决:
选择工具栏元素并选择编辑器 > 引脚 > 高度以创建约束。 转到您的视图控制器场景并选择创建的高度(44)约束,然后输入您想要的值。
【讨论】:
我发现如果我在 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;
};
即使使用隐藏/显示,这也会正确调整高度。
【讨论】:
result.height = UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? 55 : 40;
当然,只是设置不同的框架:
[myToolbar setFrame:CGRectMake(0, 50, 320, 35)];
这将使您的工具栏高 35 像素。当然,这需要一个 IBOutlet 或以编程方式创建 UIToolbar,但这很容易做到。
【讨论】:
UIToolbar 的大小吗?