最近在使用SwiftUI开发,在开发一个搜索框的时候,因为有许多的验证逻辑,所以我们没有使用SwiftUI中的TextField,而是桥接了UIKit中的UITextField。
但是遇到一个问题,就是当我们在不断输入内容的时候,UITextField会随内容的增加,最后等于屏幕宽度,如果有padding的情况下,最外面的body会被挤出屏幕,即使maxWith是小于屏幕宽度也会有同样的问题。
最后发现是需要设置UITextField抗压缩参数,设置小一点就可以。
let field = UITextField(frame: .zero)
field.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
顺便说说,什么是抗压缩与抗拉伸?
我的理解就是,值越大,越容易抗得起。
抗压缩的值越大,就越扛得起,越不容易被压缩,当空间不足的时候,就先压缩那些值更小的控件;抗拉伸的值越大,就越不容易被拉伸,当空间很大的时候,就先拉伸那些值更小的控件。
出现上面超出屏幕的问题,我的理解就是,抗压缩值太大,当空间不足了,不会被压缩,就出问题了。
聪明的你可能会发现,既然设置抗压缩为更小值可以,那么我将抗拉伸设置为更大值可以吗?我早已给各位看官验证了,这样设置解决不了这个问题!苹果设计两个属性是控制不同功能的,否则就设计为一个属性了。
主要有两个问题:
1.UITextField的宽度会变得很小。因为先拉伸值更小的。
2.当内容增加的时候,抗压缩比其他的大,就不会被压缩而压缩其他的。