IOS 13:UITextField rightView的间距问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS 13:UITextField rightView的间距问题相关的知识,希望对你有一定的参考价值。

我在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

enter image description hereenter image description here

答案
显然,这是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的自定义视图中

另一答案
可能是您的图像小于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

另一答案
我使用Bruno的方法进行工作。

1)创建一个容器视图,并使用自动布局设置其宽度和高度。宽度和高度应包括子视图的大小+所需的间距。

2)创建要在文本字段中显示的子视图。使用自动布局设置宽度,高度和布局。将其添加到容器视图。

3)将容器视图添加到文本字段中>

您可以看到我的容器与文本字段的高度匹配。宽度是按钮的宽度(44),加上我想要的间距(16)。添加子视图时,将其对齐到容器的左侧。这将使我在按钮的右侧和文本字段的边缘之间有16px的间距。

let forgotButtonContainer = UIView() forgotButtonContainer.translatesAutoresizingMaskIntoConstraints = false forgotButtonContainer.widthAnchor.constraint(equalToConstant: 44.0 + 16.0).isActive = true forgotButtonContainer.heightAnchor.constraint(equalToConstant: 48.0).isActive = true forgotButton = PFSecondaryButton(link: "Forgot?") forgotButton.translatesAutoresizingMaskIntoConstraints = false forgotButtonContainer.addSubview(forgotButton) forgotButton.topAnchor.constraint(equalTo: forgotButtonContainer.topAnchor).isActive = true forgotButton.leftAnchor.constraint(equalTo: forgotButtonContainer.leftAnchor).isActive = true forgotButton.bottomAnchor.constraint(equalTo: forgotButtonContainer.bottomAnchor).isActive = true passwordField.rightView = forgotButtonContainer

以上是关于IOS 13:UITextField rightView的间距问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS 13:带有 LeftView 间距问题的 UITextField - Xcode 11

ios更新完ios13出现的UItextField出现的app崩溃问题

ios更新完ios13出现的UItextField出现的app崩溃问题

更新到 iOS 13 后 UISearchController UITextField 背景不显示白色

iOS13新适配

添加到 UITableViewCell 的 contentView 的 UITextField 在 Popover 中无法正确显示(iPad、iOS 4.2)