swift - SwiftUI-UITextField中的状态更改导致frameWidth不受控制地增长,并且忽略了边界/框架

标签 swift uitextfield uikit swiftui uiviewrepresentable

我正在使用SwiftUI并桥接到UITextField(我需要分配firstResponder)。我从这里使用代码:SwiftUI: How to make TextField become first responder?

以下代码更新了我的@Binding var。这当然是预期的行为。问题在于,这将导致textField忽略框架/边界。它只是扩展并将其他元素推出 View 。 View 的其他部分也依赖于@State。

func textFieldDidChangeSelection(_ textField: UITextField) {
            text = textField.text ?? ""
}

如何更新@State并仍将textField保留在框架中?

最佳答案

您需要降低makeUIView中内容抵抗的优先级(因此内容不会推送SwiftUI中设置的外部布局),如下所示

func makeUIView(context: UIViewRepresentableContext<MyField>) -> UITextField {
    let field = UITextField(frame: .zero)
    field.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    ...

关于swift - SwiftUI-UITextField中的状态更改导致frameWidth不受控制地增长,并且忽略了边界/框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59192194/

相关文章:

ios - UIDatePicker 未显示在 UITextField 中。 swift 3

ios - 如何在 iOS 的 UIAlertView 中添加 3 个 UITextField?

uikit - tvOS 对 iBeacons 的支持

iOS : 'MyViewController' does not conform to protocol 'UITableViewDataSource'

ios - 如何在控制中心更新播放位置?

ios - 在声明错误之前使用局部变量 ""

ios - iOS:像 Material 设计文本字段占位符一样为占位符设置动画

cocoa-touch - 没有动画的推segue

iphone - 我应该调用 removeFromSuperview 还是 release 就好了?

swift - 当我搜索搜索 Controller 时,indexPath 不会随原始数组改变