将 func loadview 中声明的 self.view 约束到视图控制器的部分区域

Posted

技术标签:

【中文标题】将 func loadview 中声明的 self.view 约束到视图控制器的部分区域【英文标题】:constrain self.view declared in func loadview to a partial area of the view controller 【发布时间】:2019-10-26 04:22:12 【问题描述】:

我在子类画布下的代码用于绘制属性。我正在尝试将画布限制在 viewdidload 中的特定区域。问题是 func loadView 正在阻止 viewdidload 中的约束工作。在调试区域中,它指出无法同时满足约束。

  var canvas = Canvas()

 override func loadView() 
         self.view = canvas




override func viewDidLoad() 
    super.viewDidLoad()

    canvas.translatesAutoresizingMaskIntoConstraints = false

    NSLayoutConstraint.activate ([
               canvas.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :37.5),
               canvas.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
               canvas.widthAnchor.constraint(equalToConstant: 75),
               canvas.heightAnchor.constraint(equalToConstant: 50),
    ])



class Canvas: UIView 

【问题讨论】:

【参考方案1】:

您是否将 canvas 添加为 view 的子视图?您需要在设置约束之前这样做:

        canvas.translatesAutoresizingMaskIntoConstraints = false

        self.view.addSubview(canvas)

        NSLayoutConstraint.activate ([
                   canvas.trailingAnchor.constraint(equalTo: view.centerXAnchor, constant :37.5),
                   canvas.topAnchor.constraint(equalTo: view.centerYAnchor, constant : 225),
                   canvas.widthAnchor.constraint(equalToConstant: 75),
                   canvas.heightAnchor.constraint(equalToConstant: 50),
        ])

【讨论】:

我试过你的代码这是我在调试区域中得到的由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法将自身添加为子视图”

以上是关于将 func loadview 中声明的 self.view 约束到视图控制器的部分区域的主要内容,如果未能解决你的问题,请参考以下文章

在 UIViewController 的 loadView 中确定 self.view 的大小

为啥loadview中的self.view.tag和其他的不一样

loadView和viewDidLoad有什么区别?

UIViewController中的loadView方法

正确的 loadView 实现

loadView的使用总结