我在UIView内放置了一个UITextField并设置了textField.autoresizingMask = [.flexibleWidth, .flexibleHeight]
(不使用autoLayout)。我还附加了一个UISlider来更改UIView的框架。正如我用UIView设置的autoresizingMask一样,UITextField的大小也增加了。但是问题是,当我更改UIView的边界时,文本会大量弹跳。我尝试查看this SO answer并致电layoutIfNeeded()
进行范围更新调用,但它并没有停止弹跳。
编辑
我没有在subView上实现了textField。甚至我这次都没有设置autoresizingMask。但是textField仍然在弹跳。 这是Demo code snippet,也是 Demo project
答案 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)
}