SwiftUI中使用UITextField遇到的一个坑:宽度顶出屏幕

16 篇文章 0 订阅
3 篇文章 0 订阅
在SwiftUI开发中遇到UITextField随着内容增加填充全屏的问题,原因是UITextField的抗压缩优先级设置不当。通过设置setContentCompressionResistancePriority为.defaultLow解决,确保在空间不足时能正确压缩。博客讨论了抗压缩和抗拉伸的概念,并指出调整抗拉伸属性无法解决此问题。
摘要由CSDN通过智能技术生成

最近在使用SwiftUI开发,在开发一个搜索框的时候,因为有许多的验证逻辑,所以我们没有使用SwiftUI中的TextField,而是桥接了UIKit中的UITextField。

但是遇到一个问题,就是当我们在不断输入内容的时候,UITextField会随内容的增加,最后等于屏幕宽度,如果有padding的情况下,最外面的body会被挤出屏幕,即使maxWith是小于屏幕宽度也会有同样的问题。

最后发现是需要设置UITextField抗压缩参数,设置小一点就可以。

let field = UITextField(frame: .zero)
field.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

顺便说说,什么是抗压缩与抗拉伸?
我的理解就是,值越大,越容易抗得起。
抗压缩的值越大,就越扛得起,越不容易被压缩,当空间不足的时候,就先压缩那些值更小的控件;抗拉伸的值越大,就越不容易被拉伸,当空间很大的时候,就先拉伸那些值更小的控件。

出现上面超出屏幕的问题,我的理解就是,抗压缩值太大,当空间不足了,不会被压缩,就出问题了。

聪明的你可能会发现,既然设置抗压缩为更小值可以,那么我将抗拉伸设置为更大值可以吗?我早已给各位看官验证了,这样设置解决不了这个问题!苹果设计两个属性是控制不同功能的,否则就设计为一个属性了。
主要有两个问题:
1.UITextField的宽度会变得很小。因为先拉伸值更小的。
2.当内容增加的时候,抗压缩比其他的大,就不会被压缩而压缩其他的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值