首页 > 解决方案 > UITextField 绑定时弹跳的文本正在更改

问题描述

我在 UIView 中放置了一个 UITextField 并设置textField.autoresizingMask = [.flexibleWidth, .flexibleHeight](不使用自动布局)。我还附加了一个 UISlider 来更改 UIView 的框架。因为我已经用 UIView 设置了 autoresizingMask,所以 UITextField 的大小也会增加。但问题是当我更改 UIView 的边界时,文本会大量反弹。我试图调查这个 SO 答案并要求调用layoutIfNeeded()边界更新,但它并没有停止弹跳。

这是一个视频演示

编辑

我已经实现了 textField 而不是在 subView 上。甚至我这次也没有设置 autoresizingMask。但是 textField 仍然在反弹。这是演示代码片段,也是 演示项目

标签: iosswiftiphonetextuitextfield

解决方案


试试这个。

它将新的宽度和高度四舍五入到最接近的偶数。这确保标签/文本字段可以一致地居中。

@IBAction func sizeChange(_ sender: UISlider) {
    let scaleFactor = CGFloat(sender.value)
    // CGAffineTransform will rastarize the text and make it blurry
    // selectedView.transform = CGAffineTransform(scaleX: scaleFactor, y: scaleFactor)

    let baseSize = isLabelSelected ? labelBaseSize : textFielBasedSize

    let actualWidth = baseSize!.width * scaleFactor
    let roundedWidth = CGFloat(Int(round(actualWidth / 2.0)) * 2)

    let actualHeight = baseSize!.height * scaleFactor
    let roundedHeight = CGFloat(Int(round(actualHeight / 2.0)) * 2)

    selectedView.bounds = CGRect(x: selectedView.bounds.origin.x,
                                 y: selectedView.bounds.origin.y,
                                 width: roundedWidth,
                                 height: roundedHeight)

    //selectedView.bounds = CGRect(x: selectedView.bounds.origin.x,
    //                           y: selectedView.bounds.origin.y,
    //                           width: baseSize!.width * scaleFactor,
    //                           height: baseSize!.height * scaleFactor)

}

推荐阅读