将translatesAutoResizingMaskIntoConstraints设置为false会导致UITextFields rightview上的布局出现歧义

时间:2018-09-28 08:07:35

标签: swift uitextfield autoresizingmask

我不知道是否使每个对象都转换为autoresizingMaskIntoConstraints标志是否为假习惯,但这是我与此相关的问题; 我有UITextField对象,并且将它的rightView设置为UIImageView,但是当UIImageView的translationsAutoresizingMaskIntoConstraints属性在调试视图层次结构中设置为false时,会出现模棱两可的布局警告, 苹果的文档在“ translatesAutoresizingMaskIntoConstraints”主题下说:

  

如果要使用“自动布局”来动态计算视图的大小和位置,则必须将此属性设置为false,然后为视图提供一组无歧义,无冲突的约束。

但是有UITextField的方法

open func rightViewRect(forBounds bounds: CGRect) -> CGRect

那个

  

返回接收者右侧叠加视图的绘图位置。

此外,当我尝试在rightView和UITextField之间给出约束时,它表示它们不在同一层次结构中。 那么,为什么将该标记设置为false会导致布局不明确?

let imageView = UIImageView(image: UIImage(named: "infoIcon"))
imageView.contentMode = .scaleAspectFit
imageView.translatesAutoresizingMaskIntoConstraints = false //this line causes ambiguous layout
imageView.widthAnchor.constraint(equalToConstant: 15).isActive = true
textField.rightViewMode = .unlessEditing
textField.rightView = imageView

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,但就我而言,我忘记了将translatesAutoresizingMaskIntoConstraints添加为false。

您写的有关translatesAutoresizingMaskIntoConstraints的内容是正确的。通常,当您设置框架或边界时,它并不是一对很棒的夫妇。

无论如何,我尝试了您的代码,但我知道可能会有效果;

  • 首先检查您的UITextField约束。如果您的约束条件不合适,则在添加rightView之后可能会中断。
  • 第二次使用以下框架初始化imageView;
let imageView = UIImageView(frame: .zero)
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.image = UIImage(named: "logo") imageView.contentMode = .scaleAspectFit
imageView.widthAnchor.constraint(equalToConstant: 15).isActive = true
textField.rightViewMode = .always 
textField.rightView = imageView
  • 最后,我认为如果您不使用imageView.widthAnchor.constraint(equalToConstant: 15).isActive = true会更好 为您的文本字段使用具有最佳最佳分辨率的图像,然后休息就可以了。