我不知道是否使每个对象都转换为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
答案 0 :(得分:0)
我遇到了类似的问题,但就我而言,我忘记了将translatesAutoresizingMaskIntoConstraints添加为false。
您写的有关translatesAutoresizingMaskIntoConstraints的内容是正确的。通常,当您设置框架或边界时,它并不是一对很棒的夫妇。
无论如何,我尝试了您的代码,但我知道可能会有效果;
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
会更好
为您的文本字段使用具有最佳最佳分辨率的图像,然后休息就可以了。