【问题标题】:Is there a way to change the height of a UIToolbar?有没有办法改变 UIToolbar 的高度?
【发布时间】:2011-01-09 06:36:24
【问题描述】:

我在 Interface Builder 中有一个 UIToolbar,我注意到它被锁定为 44px 高。我当然想让这个更大。

Apple 是否允许调整此控件的大小?如果是这样,我该怎么做?

【问题讨论】:

    标签: iphone xcode interface-builder uitoolbar


    【解决方案1】:

    在界面生成器中,也可以使用“用户定义的运行时属性”。

    只需添加一个键路径设置为“矩形”类型的“框架”的条目并设置所需的值。

    【讨论】:

      【解决方案2】:

      快速解决方案:

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

      CGRectMake 已过时。这可以替换为CGRect。这会将工具栏的高度设置为 20。同样适用于分段控件。

      【讨论】:

        【解决方案3】:

        对于 Xcode 7.1 iOS 9,在自动布局中,大小锁定为 44px。 Xcode 菜单选项 Editor > Pin > Height 不存在,而是执行以下操作:

        在 InterfaceBuilder 中,单击工具栏元素将其选中。 Control+向下拖动工具栏中的任意位置并释放,将显示一个弹出菜单,顶部显示“高度”选项,选择它。

        您现在可以使用高度约束并根据需要进行调整。

        【讨论】:

        • 伟大、干净、简单。
        • 我认为这不适用于 UINavigationController 中的工具栏。
        • 虽然我可以使用这种方法改变高度,但它会影响工具栏在视图上的显示方式。在几分之一秒内,它在目标位置上方出现了几个像素。
        【解决方案4】:

        只要你在工具栏上有一个高度限制,你就可以使用这个小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;
            }
         }
        

        【讨论】:

          【解决方案5】:

          我不确定 Apple 会如何处理 - 当然这取决于您希望如何使用工具栏 - 但您可以添加默认 UIView 并将其在属性检查器中的类更改为 UIToolbar。这为您免费提供了透明度和可定制性(在本例中为高度),但会牺牲条形按钮项的布局。

          【讨论】:

            【解决方案6】:

            您也可以只编辑 xib 文件:

            将其作为源代码打开并找到定义 UIToolbar 框架的条目,类似于

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

            只需将 44 的值更改为您需要的任何大小。

            这样工具栏会更高,在 InterfaceBuilder 中你会看到新的尺寸变灰,你将无法改变它,但你不需要任何插座或代码。

            【讨论】:

            • 这似乎不再起作用了。刚刚在 XCode 5.1.1 上针对使用 iOS7 样式的情节提要进行了测试。这些值正在重置为默认值。
            • 实际上适用于ios10 swift,您需要查找的行是<constraint firstAttribute="height" constant="80" id="fZW-ej-FYO"/>
            • 这对我来说是使用自定义 Xib 的工作点,现在可以在此行中找到 IOS13 高度的注释:<rect key="frame" x="0.0" y="0.0" width="187" height="57"/>
            【解决方案7】:

            在 iOS 6 中,使用自动布局,最简单的方法是 UIToolbar 子类,您可以在其中覆盖 instrinsicContentSize。这是我的一个应用程序的代码,其中工具栏很高。它的侧面和底部像往常一样固定在超级视图的侧面和底部。

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

            【讨论】:

            • 我喜欢你的解决方案。我正在使用 UINavigationController 上的内置工具栏,所以我不能子类化。相反,我在UIToolbar 上调配了intrinsicContentSize 并返回了我想要的高度。
            • @KyleRedfearn “我正在使用 UINavigationController 上的内置工具栏,所以我不能子类化” 不正确。 initWithNavigationBarClass:toolbarClass: 允许您在导航控制器中使用 UIToolbar 子类。
            • 哦,是的。我忘记了初始化程序。谢谢!
            【解决方案8】:

            如果这在 SDK 6 中不起作用,可以如下解决:

            选择工具栏元素并选择编辑器 > 引脚 > 高度以创建约束。 转到您的视图控制器场景并选择创建的高度(44)约束,然后输入您想要的值。

            【讨论】:

            • 我很高兴我找到了这条评论,我希望我能给你投票一千次。花了很多时间试图在代码中解决这个问题。
            • 这真是天才。谢谢你。谢谢。
            • xcode 8 具有此功能。不确定不同版本之间发生了什么。
            • 它现在在以后的版本中位于哪里?我在编辑器下没有看到它
            【解决方案9】:

            我发现如果我在 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;
            };     
            

            即使使用隐藏/显示,这也会正确调整高度。

            【讨论】:

            • 我发现当我有一个奇数的高度值(非视网膜分辨率)时,原点移动了 0.5 个像素。我必须在 VC 的 viewDidLoad 方法中更正导航栏和工具栏的框架
            • @Ege,你能详细说明一下吗?
            • 当然@MarqueIV,我覆盖了导航栏(不是工具栏)的自定义高度的 sizeThatFits 并发现当我的高度不是 4 点的倍数时,当我隐藏导航栏时并重新显示它,它的原点 y 值是 0.5 而不是 0。当我有一个自定义高度值是 4 的倍数时,我没有遇到这种行为
            • @Ege 什么?您不能直接设置点值。除非你使用 0.5 的增量..
            • 如果您想在设备旋转时更改工具栏高度(现在是 iOS 默认设置),您可以添加如下内容:result.height = UIInterfaceOrientationIsPortrait([UIApplication sharedApplication].statusBarOrientation) ? 55 : 40;
            【解决方案10】:

            当然,只是设置不同的框架:

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

            这将使您的工具栏高 35 像素。当然,这需要一个 IBOutlet 或以编程方式创建 UIToolbar,但这很容易做到。

            【讨论】:

            • AppStore 会拒绝调整UIToolbar 的大小吗?
            • 不,我试过了,但我遇到了低谷。但有时这取决于你的苹果人的日常心情。
            • 我不喜欢这个解决方案,因为它会导致工具栏在外观转换时调整大小。下面的 sizeThatFits 解决方案效果最好
            • 不能在最新的iOS上运行,答案完全错误
            猜你喜欢
            • 2020-05-15
            • 2017-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多