如何在 Xcode 4 中正确创建调整为文本长度的 UIButton?

Posted

技术标签:

【中文标题】如何在 Xcode 4 中正确创建调整为文本长度的 UIButton?【英文标题】:How to properly create a UIButton that resizes to the text length in Xcode 4? 【发布时间】:2011-09-05 09:23:13 【问题描述】:

在 Xcode 4 中,您应该能够设计根据内容调整大小的 UI 界面。看起来仍然有一些关于如何获得它的缺失部分。

我有一个在 XIB 文件中配置为向右调整大小的按钮,它有足够的空间来执行此操作。

问题是在标签更新时调整按钮大小没有接缝。

这可以通过在标签更改后添加[button sizeToFit]; 来解决。

我仍在寻找一种无需将此手动步骤添加到代码中即可工作的解决方案。

我提到有足够的空间来进一步展开按钮,仍然sizeToFit 接缝来放大按钮但仍然不足以容纳整个文本。

我错过了什么?

【问题讨论】:

【参考方案1】:

[button sizeToFit] 对我不起作用,但我找到了一种单独使用 IB 的方法(xcode 4.5):

    点击UIButton 在大小检查器中将 content hugging 拖到 1(水平和垂直) 将 compression resistance 拖动到 999(两者都适用) 在 UIButton 的 constraints 下单击 Width 并将 priority 更改为 250 对身高做同样的事情 您可以使用UIButtoninset 来控制左/右/上/下的填充

【讨论】:

这应该是ios 7时代公认的答案。 将压缩阻力设置为 1000 是不好的做法。将其设置为 999:developer.apple.com/library/ios/documentation/UserExperience/… @Damnum 我不认为 999 有什么神奇的价值,他们只是把它作为高优先级数字的一个例子,我认为 1000 是一样的。 1000 表示“必需”,因此自定义约束可能会与系统创建的约束产生冲突。所以 751-999 之间的任何数字都应该这样做【参考方案2】:

设置标题后,您需要在按钮上调用sizeToFit 以使其调整大小以适合给定的标题。

您可以通过继承UIButton、覆盖setTitle:forControlState: 方法并在其中实现对sizeToFit 的调用来删除手动步骤。不要忘记调用超级实现,否则你的标题将不会被设置并且会发生不好的事情。

【讨论】:

sizeToFit 应该可以工作,但接缝表明它没有将按钮放大到足够大。 这个按钮是否被子类化了?您是否为标签使用自定义字体? @Jasarien 也有同样的问题。我不是子类化,而是使用自定义字体,并且标签不会扩展以适应对 sizeToFit 的调用的内容,但它会在必要时收缩!想知道约束是否存在一些问题。不知道如何修复它们。【参考方案3】:

在 XCode 4.5 及更高版本中,现在可以使用“Auto-layouting / Constraints”来完成。

主要优点是:

    您根本不需要以编程方式设置框架! 如果操作正确,您无需为改变方向而重新设置框架。 此外,设备更改不必打扰您(阅读,无需针对不同的屏幕尺寸单独编码)。

一些缺点:

    不向后兼容 - 仅适用于 iOS 6 及更高版本。 需要熟悉一下(但以后会节省时间)。

最酷的事情是我们可以专注于声明一个意图,例如:

我希望这两个按钮的宽度相同;或 我需要这个视图垂直居中并从超级视图的边缘延伸到最大 10 pts;甚至, 我希望此按钮/标签根据其显示的标签调整大小!

以下是介绍自动布局的简单教程: http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2

要更详细地了解事物,请访问: http://www.techotopia.com/index.php/An_Introduction_to_Auto_Layout_in_iOS_6

一开始需要一些时间,但看起来确实值得付出努力。

干杯!

【讨论】:

说“使用自动布局”并不是一个好的答案。给出一些问题的示例代码。 这是一个糟糕的答案,事实上我什至可以说这根本不是一个答案。

以上是关于如何在 Xcode 4 中正确创建调整为文本长度的 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章

xcode将不同的最大字符长度设置为不同的TextField

根据文本长度调整快餐栏消息的大小[重复]

当视图宽度发生变化时,如何使 UILabel 正确调整其尺寸?

如何在TVirtualStringTree中自动调整跨越列的大小?

如何在 Xcode 中调整 UIStackView 的子视图大小?

根据标签长度调整从 xib 创建的视图大小