我有一个视图设置,其中布局了 4 个 UITextFields 并设置了约束,以便它在所有设备上看起来都很棒并且按预期工作。 我有一个问题,如果我使用 TextField.text = @" some long text "; 设置文本或 [TextField setText:@"一些长文本"];它会导致文本字段扩展其宽度以适应文本的长度,然后由于限制,其他文本字段也会调整大小。
如何停止文本字段大小调整?我希望字段保持不变,并且用户如果想要到达末尾就能够滚动文本?
谢谢
你只需要改变约束即可。为 UITextField 提供显式的内部宽度约束(或使用约束以其他方式设置或限制其宽度),然后事情就会按照您的意愿运行。
请记住,一般来说,视图大小和位置的所有方面都必须由其约束明确配置。然而,现在您的文本字段没有宽度约束,因此其宽度基于其文本内容(即,它使用内在内容大小来获取其宽度)。省略宽度约束并不违法,这就是为什么 Interface Builder 在设置约束时没有抱怨的原因 - 但它是合法的,只是因为有一个提供宽度的内在内容大小,因此它确实意味着宽度会改变,如果内部文本发生变化。如果这不是您想要的,那么不要这样做 - 而是提供显式的宽度约束。 (类似地,文本字段的隐式高度为 30,这就是为什么您不必为其指定高度约束。该高度不会
随文本内容而变化,因为与 UILabel 不同,文本字段不会随文本内容而变化。不要将其文本换行为多行。)在一些奇怪的情况下,求解器规则很难猜测。例如
制作一个外部包装 UIView
setContentCompressionResistancePriority(.required, for: .horizontal)
setContentHuggingPriority(.required, for: .horizontal)
应用于包装器和/或文本字段本身。