ios - 是否可以在 UITextField 的左视图中使用自动布局?
问题描述
我想使用根据其内容自动调整大小的视图UITextField
自定义 a :leftView
func set(leftImage image: UIImage) {
let imageView = UIImageView(image: image)
let paddingContainer = UIView()
// This is the crucial point:
paddingContainer.translatesAutoresizingMaskIntoConstraints = false
paddingContainer.addSubview(imageView)
imageView.pin(toMarginsOf: paddingContainer)
leftView = paddingContainer
leftViewMode = .always
}
该pin
方法只是将所有四个侧面的图像视图固定到的边缘paddingContainer
:
func pin(toMarginsOf view: UIView) {
translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor),
leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),
trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor)
])
}
在 iOS 12 上,一切都按预期工作,但在 iOS 版本 < 12 上,图像完全放错了位置。它甚至不在文本字段的范围内,而是在我的视图控制器视图的左上角。
在我看来,旧版本的 iOS 似乎不支持在您设置为文本字段的视图内使用自动布局leftView
。该文档指出:
左侧覆盖视图放置在
leftViewRect(forBounds:)
接收方方法返回的矩形中。
但它没有说明它是如何放置在那里的:通过使用约束或直接设置框架。
如果完全支持使用自动布局,是否有任何可靠的来源或有根据的猜测leftView
?
解决方案
extension UITextField{
func setLeft(image: UIImage, withPadding padding: CGFloat = 0) {
let wrapperView = UIView.init(
frame: CGRect.init(
x: 0,
y: 0,
width: bounds.height,
height: bounds.height
)
)
let imageView = UIImageView()
imageView.image = image
imageView.contentMode = .scaleAspectFit
wrapperView.addSubview(imageView)
imageView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
imageView.leadingAnchor.constraint(
equalTo: wrapperView.leadingAnchor,
constant: padding
),
imageView.trailingAnchor.constraint(
equalTo: wrapperView.trailingAnchor,
constant: -padding
),
imageView.topAnchor.constraint(
equalTo: wrapperView.topAnchor,
constant: padding
),
imageView.bottomAnchor.constraint(
equalTo: wrapperView.bottomAnchor,
constant: -padding
)
])
leftView = wrapperView
leftViewMode = .always
}
}
希望这会有所帮助
推荐阅读
- javascript - Select2 样式属性未拾取
- facebook - 通过 facebook 营销 api 获取 Facebook 最新的广告类型及其要求
- python - Optimisation of a numerical model with several data sets (scipy.minimize / scipy.optimise, pymoo or ??)
- sql - 用于存储播放列表和相关曲目的 RDS 数据模型设计?
- python - 安装 virtualenvwrapper 时出现 pyenv 错误
- firebase - 错误“包:cloud_firestore/src/query.dart”:断言失败:第 226 行 pos 12:“documentSnapshot != null”:不正确。扑火商店
- json - 使用本机消息通过 Delphi 从 Thunderbird 复制电子邮件时遇到编码问题
- javascript - 如何在 Wordpress 中根据标题和内容搜索产品?
- c++ - 来自协议缓冲区消息的普通结构
- javascript - 使用 yargs api 的动态和类型安全的函数参数