【问题标题】:How to Increase/decrease UIButton width according to title lable text changes?如何根据标题标签文本的变化增加/减少按钮宽度?
【发布时间】:2017-12-31 09:07:28
【问题描述】:

我问的问题纯粹是使用自动布局,我不想根据文本宽度手动设置框架。

我知道更改内容拥抱优先级,我对一个标签和一个按钮使用了相同的标签,但对按钮无效,谁能帮忙

【问题讨论】:

    标签: ios iphone autolayout storyboard nslayoutconstraint


    【解决方案1】:

    按钮已经设置了它的“内在内容宽度”以适应它的标题。

    如果没有其他约束覆盖该固有内容宽度,则按钮将是该固有宽度,这就是您想要的。演示:

    这是我的故事板大纲:

    我将水平堆栈视图的对齐方式设置为“左”(而不是“填充”),这样它就不会拉伸顶行来填充屏幕宽度。

    如果您的按钮在其固有宽度上不是,则您有更高优先级(可能是优先级 1000)的约束将其强制为其他宽度。

    您可以尝试通过将其 Content Hugging Priority 和 Content Compression Resistance Priority 都设置为 1000 来强制它始终保持其固有内容宽度。

    如果您将两个优先级都设置为 1000,并且您有任何其他必需的约束阻止按钮成为其固有大小,您将在运行时在调试日志中收到错误消息,告诉您存在冲突(无法满足)的约束。这些消息将包含完整的约束集,因此您可以尝试找出您不想要的约束。

    【讨论】:

    • 谢谢@rob,我有一个问题:你对按钮有什么限制?对栈视图有依赖吗?
    • 我没有对按钮施加任何限制。顶层(垂直)堆栈视图对超级视图的顶部、前缘和后缘有约束。文档大纲显示了我创建的每个约束。
    • 如果我不想使用堆栈视图怎么办?
    • 那么……不要使用堆栈视图。我的答案的重要部分与堆栈视图无关。
    【解决方案2】:

    • UILabel 对象的宽度约束应该小于 或等价关系
    • UIButton 对象的宽度约束应该是更大的 小于或等于关系
    • UILabel 对象的水平内容拥抱优先级 应该是 249(根据我上面显示的约束设置)
    • 并根据您的要求将UILabel 宽度常数值设置为最大可能值。

    及相关代码为:

    [buttonObject setTitle:@"Button title is ..." forState:UIControlStateNormal];
    [buttonObject sizeToFit];
    

    【讨论】:

      【解决方案3】:

      如果您想这样做,您可以创建自定义视图:Take - UIView 并将其类更改为 UIButton 并添加 UILabel 并应用所有必需的约束。 通过这一切设置,您可以实现所需的 UI。 如果你想这样实现,请试试这个。

      【讨论】:

        猜你喜欢
        • 2021-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-19
        • 2019-05-03
        • 2011-03-19
        • 2017-11-20
        相关资源
        最近更新 更多