【问题标题】:Programmatically adding root view to view controller does not position correctly以编程方式将根视图添加到视图控制器未正确定位
【发布时间】:2017-03-31 16:51:17
【问题描述】:

我正在尝试以编程方式将根视图和子视图添加到视图控制器,但视图未按预期填充到屏幕:

override func loadView() {
        self.view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
        self.view.backgroundColor = UIColor.blue
    }

    override func viewDidLoad() {

        let alertView = Bundle.main.loadNibNamed("CHRApptTakenAlertView", owner: self, options: nil)![0] as! CHRApptTakenAlertView

        self.view.translatesAutoresizingMaskIntoConstraints = false
        alertView.translatesAutoresizingMaskIntoConstraints = false

        self.view.addSubview(alertView)
        self.view.addConstraint(NSLayoutConstraint(item: alertView, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0))
        self.view.addConstraint(NSLayoutConstraint(item: alertView, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: self.view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0))
        alertView.addConstraint(NSLayoutConstraint(item: alertView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.width, multiplier: 1, constant: 350))
        alertView.addConstraint(NSLayoutConstraint(item: alertView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.height, multiplier: 1, constant: 250))

        alertView.closeBtn.addTarget(self, action: #selector(self.closeBtnTouch), for: UIControlEvents.touchUpInside)
    }

【问题讨论】:

  • 你不应该设置self.view.translatesAutoresizingMaskIntoConstraints = false
  • @Sethmr 我无法在约束之后添加子视图,因为层次结构必须在添加约束之前存在。但是,删除两条翻译行并在我的 loadView() 方法末尾添加 self.view.layoutIfNeeded() 有效。添加为答案,我会接受。

标签: swift uiview uiviewcontroller


【解决方案1】:

去掉self.view.translatesAutoresizingMaskIntoConstraints = false这一行,添加约束后调用self.view.layoutIfNeeded()。

【讨论】:

  • 请删除“添加约束后尝试添加子视图”的部分,因为这会导致错误,因为视图层次结构不适合添加约束,我会接受。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多