我在按钮旁边的视图中放置了一个UITextField。它对按钮的尾随约束为8(对superview的尾随约束为8),当我在其中键入长文本时,它只是滚动,这就是我想要的。但是,为了保留在字段中键入的文本(如果视图切换到另一个视图(它在选项卡控制器中),我将文本保存在holder变量中,当它切换回该视图时,我将字段中的文本设置为保存的文本。
问题是,如果文本足够长,这会导致字段水平扩展,有时在屏幕外按下按钮,即使有拖尾8约束。我尝试将字段的原始框架保存在holder变量中,然后在设置文本之后,将框架设置为保存的原始框架,如下所示:
fieldFrame = messageField.frame
println(messageField.frame.width)
messageField.text = holderMessage
println(messageField.frame.width)
messageField.frame = fieldFrame然而,该领域仍在扩展,并打印了两次502.0。我目前的想法是,在设置文本之后,框架没有为println及时记录宽度的变化,但我不确定这是否正确。
此外,我还阅读了一些类似的问题,这些问题建议使用宽度约束。如果我在字段上使用小于或等于宽度的约束,如果在更薄的设备上,它还会扩展吗?也就是说,由于我目前使用的是任意宽度和任意高度的情节提要,它比iPhone 6宽。因此,如果我在字段的当前宽度上设置了小于或等于宽度的约束,那么该字段似乎仍然可以在较小的设备上扩展,而不会打破这个限制。
是否有更好的方法来执行这样的宽度约束?如果没有,我如何才能阻止字段的扩展和按下屏幕外的按钮?
发布于 2015-08-18 00:30:55
问题出在这里。文本字段倾向于水平地调整其内容的大小。该按钮有水平调整自身大小的趋势。因此,您有一个模棱两可的问题:这些倾向具有相同的优先级,因此运行时不知道在文本字段的文本变得太长时哪一个应该折叠。
解决办法是调整这些优先次序。您必须降低文本字段的水平压缩和拥抱优先级--低一点就足够了。现在,按钮将有一个更强的倾向,使自己的大小与其内容相匹配,文本字段将剪辑其内容。

发布于 2021-03-30 12:09:21
您还可以以编程方式降低Content Compression Resistance (如果在SwiftUi中使用UIViewRepresentable,也可以这样做):
uiTextField.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)有关此主题的更多信息,请参见:
https://medium.com/@dineshk1389/content-hugging-and-compression-resistance-in-ios-35a0e8f19118
发布于 2018-06-13 13:45:25
选择文本视图,然后在大小检查器中: 1)将“布局边距”设置为“固定”。2)在“内容抗压缩优先级”下,将“水平”设置为“低(250)”。
https://stackoverflow.com/questions/32061500
复制相似问题