iOS - 以编程方式将UIImageView定位在具有自动布局的UITextField中

时间:2015-11-09 14:55:18

标签: ios swift uiimageview autolayout

我想以编程方式添加图像视图(选中标记)作为一个文本字段的子视图。由于我在所有视图中使用autolayout,因此我想使用约束来定位此子视图。这是代码:

class UIFormTextField: UITextField {

    lazy var checkMarkView = UIImageView(image: UIImage(named: "BarButtonItemCheck"))

    func setCheckMarkView() {
        self.addSubview(checkMarkView)
        self.addConstraints([
            NSLayoutConstraint(item: checkMarkView, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: CGFloat(1), constant: CGFloat(0)),
            NSLayoutConstraint(item: checkMarkView, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: CGFloat(1), constant: -UIStyle.Size.standardHorizontalSpacing)
            ])
    }
}

我在viewDidLoad函数中调用setCheckMarkView但它不起作用。我得到一个警告:“可能至少有以下列表中的一个限制是你不想要的。”

这是列表,但我不明白为什么其他约束会干扰新视图。

"<NSAutoresizingMaskLayoutConstraint:0x15084acf0 h=--& v=--& UIImageView:0x15089f4d0.midX == + 12>",
"<NSAutoresizingMaskLayoutConstraint:0x14f691d70 h=--& v=--& H:[UIImageView:0x15089f4d0(24)]>",
"<NSLayoutConstraint:0x1509c54e0 H:[Bruce.UIFormTextField:0x150895520]-(0)-|   (Names: '|':Bruce.UIForm:0x150998430 )>",
"<NSLayoutConstraint:0x1509a6120 H:|-(0)-[Bruce.UIFormTextField:0x150895520]   (Names: '|':Bruce.UIForm:0x150998430 )>",
"<NSLayoutConstraint:0x14f593e20 H:[Bruce.UIForm:0x150998430]-(0)-|   (Names: '|':UIView:0x1509c92d0 )>",
"<NSLayoutConstraint:0x150950f10 H:|-(0)-[Bruce.UIForm:0x150998430]   (Names: '|':UIView:0x1509c92d0 )>",
"<NSLayoutConstraint:0x14f6143b0 UIView:0x1509c92d0.width == UIView:0x15094e8f0.width>",
"<NSLayoutConstraint:0x150813210 UIImageView:0x15089f4d0.trailing == Bruce.UIFormTextField:0x150895520.trailing - 20>",
"<NSLayoutConstraint:0x150896350 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15094e8f0(320)]>"

感谢您的帮助,

1 个答案:

答案 0 :(得分:3)

问题是您需要禁用imageView上的node.default属性。这就是为什么你看到约束

的“NSAutoresizingMaskLayoutConstraint”问题

更新的代码:

translatesAutoresizingMaskIntoConstraints

编辑: 您实际上不需要禁用声明checkMarkView的属性。您也可以在“setCheckMarkView”函数中执行此操作,即

lazy var checkMarkView: UIImageView = {
    let imageView = UIImageView(image: UIImage(named: "BarButtonItemCheck"))
    imageView.translatesAutoresizingMaskIntoConstraints = false
    return imageView
}()
相关问题