使子视图适合容器内部并正确调整大小

Skw*_*ggs 5 uiview nib swift

我正在尝试将动态笔尖加载为容器的子视图.我几乎得到它的工作,除了子视图有一个我似乎无法摆脱的偏移(参见下面图片中的粉红色视图).

在此输入图像描述

从View Hierarchy调试:

在此输入图像描述

正如您在第2张图片中看到的那样,容器框架已正确定位,而子视图由于某种原因未正确定位.

我真的不知道autolayout会发生什么.

这是处理加载笔尖并将其指定为子视图的代码:

在此输入图像描述

注释掉的代码是我试图使它工作的所有东西,没有成功.我认为autolayout可以独立工作而不需要做任何事情,但默认情况下它加载nib而不调整它.

这意味着前导和顶部锚是正确的,但是笔尖然后使用它的全尺寸......(参见下图)

在此输入图像描述

所以问题是,为了加载笔尖并使其适合容器视图,我需要做些什么?

小智 4

您应该向 NibView 添加约束,而不是设置 NibView 的边界和框架。

\n\n

将 NibView 添加为内容视图的子视图后,尝试在 NibView 上调用以下函数 (addFullScreenConstraint):

\n\n
  extension UIView {\n\n    /// Adds constraints to this `UIView` instances `superview` object\n    /// to make sure this always has the same size as the superview.\n    /// Please note that this has no effect if its `superview` is `nil`\n    /// \xe2\x80\x93 add this `UIView` instance as a subview before calling this.\n    func addFullScreenConstraints() {\n        guard let superview = self.superview else {\n            return\n        }\n\n        self.translatesAutoresizingMaskIntoConstraints = false\n        superview.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[subview]-0-|",\n                                                                options: .directionLeadingToTrailing, metrics: nil, views: ["subview": self]))\n        superview.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[subview]-0-|",\n                                                                options: .directionLeadingToTrailing, metrics: nil, views: ["subview": self]))\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n