首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IOS 13: UITextField rightView的间距问题

IOS 13: UITextField rightView的间距问题
EN

Stack Overflow用户
提问于 2019-09-30 10:37:16
回答 8查看 10.3K关注 0票数 25

我面临一个间隔问题,在IOS 13中有一个正确的UITextField视图,请参阅下面的ios 13和ios 12.4的代码和屏幕截图

在IOS 12.4中,模拟器在UITextField的右视图(UITextField)中显示适当的空间

在IOS 13.0中,模拟器在UITextField的右视图(UITextField)中有一个间隔问题

代码语言:javascript
运行
复制
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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 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的自定义视图中

例子:-

代码语言:javascript
运行
复制
override func rightViewRect(forBounds bounds: CGRect) -> CGRect {
        return CGRect(x: bounds.width - 30, y: 0, width: 20 , height: bounds.height)
    }
票数 33
EN

Stack Overflow用户

发布于 2019-11-11 14:12:15

为要添加的leftView或rightView设置宽度约束。

代码语言:javascript
运行
复制
leftImageView.widthAnchor.set(to: 30.0)
textField.leftView = leftImageView
textField.leftViewMode = .always

下面是我用来设置宽度约束的扩展:

代码语言:javascript
运行
复制
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
    }
}
票数 14
EN

Stack Overflow用户

发布于 2019-09-30 11:21:30

可能你的图像比width: 50, height: txtField.frame.height小,所以你的按钮被缩小了。

您可以尝试添加一些容器:

代码语言:javascript
运行
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58166160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档