我面临一个间隔问题,在IOS 13中有一个正确的UITextField视图,请参阅下面的ios 13和ios 12.4的代码和屏幕截图
在IOS 12.4中,模拟器在UITextField的右视图(UITextField)中显示适当的空间
在IOS 13.0中,模拟器在UITextField的右视图(UITextField)中有一个间隔问题
let dropdownButton = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: txtField.frame.height))
dropdownButton.backgroundColor = UIColor.clear
dropdownButton.setImage(UIImage(named: "ic_DownArrow"), for: UIControl.State())
txtField.rightView = dropdownButton
txtField.rightViewMode = .always
发布于 2019-09-30 18:11:35
显然,这改变了rightViewRect(forBounds:)在iOS 13 Beta 5中的行为方式。
来自iOS & iPadOS 13 Developer Beta 5发行说明:
UIKit -已解决的问题
在iOS 13之前,UITextField假定其leftView和rightView的帧在分配时被正确设置,并且不会更改。从iOS 13开始,leftViewRect(forBounds:)和rightViewRect(forBounds:)的实现现在为其systemLayoutSizeFitting(:)询问视图。若要在iOS 13上链接和运行之前的行为,请在视图上添加显式的大小调整约束,将其包装在普通的UIView中,或将视图子类化并实现systemLayoutSizeFitting(:)。(51787798)
因此,将自动布局约束添加到添加到rightView的自定义视图中
例子:-
override func rightViewRect(forBounds bounds: CGRect) -> CGRect {
return CGRect(x: bounds.width - 30, y: 0, width: 20 , height: bounds.height)
}
发布于 2019-11-11 14:12:15
为要添加的leftView或rightView设置宽度约束。
leftImageView.widthAnchor.set(to: 30.0)
textField.leftView = leftImageView
textField.leftViewMode = .always
下面是我用来设置宽度约束的扩展:
extension NSLayoutDimension {
@discardableResult
func set(
to constant: CGFloat,
priority: UILayoutPriority = .required
) -> NSLayoutConstraint {
let cons = constraint(equalToConstant: constant)
cons.priority = priority
cons.isActive = true
return cons
}
}
发布于 2019-09-30 11:21:30
可能你的图像比width: 50, height: txtField.frame.height
小,所以你的按钮被缩小了。
您可以尝试添加一些容器:
let dropdownButton = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: txtField.frame.height))
dropdownButton.backgroundColor = .clear
dropdownButton.setImage(UIImage(named: "ic_DownArrow"), for: UIControl.State())
let container = UIView(frame: dropdownButton.frame)
container.backgroundColor = .clear
container.addSubview(dropdownButton)
txtField.rightView = container
txtField.rightViewMode = .always
https://stackoverflow.com/questions/58166160
复制相似问题