Atu*_*mar 11 uitextfield ios swift ios13 xcode11
我在IOS 13中使用UITextField的正确视图面临间距问题,请参阅以下代码以及ios 13和ios 12.4的屏幕截图
在IOS 12.4模拟器中,在UITextField的右视图(UIButton)中显示适当的空间
在IOS 13.0中,模拟器在UITextField的右视图(UIButton)中存在间距问题
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
Run Code Online (Sandbox Code Playgroud)
小智 14
显然,这是对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链接并在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)
}
Run Code Online (Sandbox Code Playgroud)
Abd*_*man 11
为您添加的 leftView 或 rightView 设置宽度约束。
leftImageView.widthAnchor.set(to: 30.0)
textField.leftView = leftImageView
textField.leftViewMode = .always
Run Code Online (Sandbox Code Playgroud)
这是我用来设置宽度约束的扩展:
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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1672 次 |
最近记录: |