ios - UITextField 绑定时弹跳的文本正在更改
问题描述
我在 UIView 中放置了一个 UITextField 并设置textField.autoresizingMask = [.flexibleWidth, .flexibleHeight]
(不使用自动布局)。我还附加了一个 UISlider 来更改 UIView 的框架。因为我已经用 UIView 设置了 autoresizingMask,所以 UITextField 的大小也会增加。但问题是当我更改 UIView 的边界时,文本会大量反弹。我试图调查这个 SO 答案并要求调用layoutIfNeeded()
边界更新,但它并没有停止弹跳。
编辑
我已经实现了 textField 而不是在 subView 上。甚至我这次也没有设置 autoresizingMask。但是 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)
}
推荐阅读
- python - factory-boy:将“size”即时传递给 RelatedFactoryList
- php - 如何使用 jQuery 将 HTML/PHP 数据插入 MySQL 数据库
- linux - 我想从我的 Linux 机器上删除任何本地安装的包并直接使用环境中的包
- java - “无法解析 com.google.protobuf:protoc:4.0.0-rc-2”尝试使用 Protobuf Gradle 插件
- apache-spark - 是否可以在不停止 SparkContext 的情况下刷新和上传 Spark 事件日志?
- google-apps-script - GoogleJsonResponseException:对 drive.files.insert 的 API 调用失败并出现错误:错误请求
- java - 异常 NoClassDefFoundError: org/jsoup/Jsoup
- python - 从python列表项中提取文本
- android - 我无法在 android studio 上的 android 应用程序上更改文本
- python - reticulate 在 Linux 上找不到 conda env