Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何根据标题标签文本的变化增加/减少UIButton宽度?_Ios_Iphone_Autolayout_Storyboard_Nslayoutconstraint - Fatal编程技术网

Ios 如何根据标题标签文本的变化增加/减少UIButton宽度?

Ios 如何根据标题标签文本的变化增加/减少UIButton宽度?,ios,iphone,autolayout,storyboard,nslayoutconstraint,Ios,Iphone,Autolayout,Storyboard,Nslayoutconstraint,我问的问题纯粹是使用自动布局,我不想根据文本宽度手动设置框架 我知道内容优先权的变化,我对一个标签和一个按钮使用了相同的更改。标签可以正常工作,但对按钮无效。如果您想这样做,有人能帮忙吗,您可以创建自定义视图:获取-UIView并将其类更改为UIButton,添加UILabel并应用所有必需的约束。 通过这些设置,您可以实现所需的UI。 如果您想这样实现,请尝试此操作。 UILabel对象的宽度约束应小于 或同等关系 ui按钮对象的宽度约束应更大 等比关系 UILabel对象的水平内容包含优先

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


我知道内容优先权的变化,我对一个标签和一个按钮使用了相同的更改。标签可以正常工作,但对按钮无效。如果您想这样做,有人能帮忙吗,您可以创建自定义视图:获取-
UIView
并将其类更改为
UIButton
,添加
UILabel
并应用所有必需的约束。 通过这些设置,您可以实现所需的UI。 如果您想这样实现,请尝试此操作。

  • UILabel
    对象的宽度约束应小于 或同等关系
  • ui按钮
    对象的宽度约束应更大 等比关系
  • UILabel
    对象的水平内容包含优先级 应为249(根据上面显示的我的约束设置)
  • 并根据需要将
    UILabel
    width常量值设置为最大可能值
及相关代码如下:

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

该按钮已将其“固有内容宽度”设置为适合其标题

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

以下是我的故事板大纲:

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

如果您的按钮在其固有宽度上,则您有更高的优先级(可能是优先级1000)约束,迫使它使用其他宽度

您可以通过将其内容拥抱优先级和内容压缩阻力优先级设置为1000,尝试强制它始终保持其固有的内容宽度


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

谢谢@rob,我有一些问题:您对button有哪些约束?堆栈视图是否存在依赖关系?我没有对按钮设置任何约束。顶级(垂直)堆栈视图对superview的顶边、前缘和后缘具有约束。文档大纲显示了我创建的每个约束。如果我不想使用堆栈视图怎么办?那么…不要使用堆栈视图。我的答案的重要部分与堆栈视图无关。