UITextField绑定更改时文本会弹跳

时间:2019-07-11 13:32:32

标签: ios swift iphone text uitextfield

我在UIView内放置了一个UITextField并设置了textField.autoresizingMask = [.flexibleWidth, .flexibleHeight](不使用autoLayout)。我还附加了一个UISlider来更改UIView的框架。正如我用UIView设置的autoresizingMask一样,UITextField的大小也增加了。但是问题是,当我更改UIView的边界时,文本会大量弹跳。我尝试查看this SO answer并致电layoutIfNeeded()进行范围更新调用,但它并没有停止弹跳。

Here is a video demo

编辑

我没有在subView上实现了textField。甚至我这次都没有设置autoresizingMask。但是textField仍然在弹跳。 这是Demo code snippet,也是 Demo project

1 个答案:

答案 0 :(得分:0)

尝试一下。

它将新的宽度和高度四舍五入到最接近的偶数。这样可以确保标签/ textField可以始终居中居中。

@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)

}