【发布时间】:2018-06-26 19:13:54
【问题描述】:
我有一个透明的 UIView。此视图称为“mainView”
我想向 mainView 添加一个相同大小的子视图。 所以,我在 mainView 类本身中初始化它:https://i.stack.imgur.com/pz6Ql.png 它看起来像这样:[https://i.stack.imgur.com/Y8MEr.png] 这正是我想要的!
但是假设我删除了这段代码,并且我想在我的 UIViewController 中初始化一个子视图:https://i.stack.imgur.com/aCpWf.png 我创建了 mainView 的出口并使用边界进行初始化mainView 的一个 subView。
不幸的是,我的视图现在看起来像这样:https://i.stack.imgur.com/stekd.png 但是您可以在上面的代码中看到我将框架正确设置为视图的框架 mainView.bounds
您能解释一下为什么新视图(子视图)的大小与我在 mainView 类 本身中初始化它时的大小不同吗?
【问题讨论】:
-
您需要edit 将您的代码作为文本包含在您的问题中,而不是作为图像链接。
-
为什么?代码图片是不是更简单?
-
没有。无法搜索到图片链接的代码,无法引用它们,它们使问题更难阅读,这是最好的部分 - 将实际代码复制并粘贴到您的问题中比截屏和截屏要简单得多上传图片。
-
首先,永远不要在
Draw()中创建/添加子视图——这会被多次调用,你最终会得到很多重复的按钮。其次,使用自动布局和约束而不是显式设置框架...视图的框架未在viewDidLoad()中设置,这就是它不匹配的原因。使用自动布局可以解决这个问题,加上“自动”会在超级视图更改(例如旋转设备)时更改它。 -
@DonMag 您说“视图的框架未在
viewDidLoad()中设置。但是当我在加载 mainView 后设置框架时,它仍然具有相同的“假”大小。@IBOutlet weak var mainView: MainView! { didSet { let newView = UIView(frame: mainView.bounds) newView.backgroundColor = UIColor.green mainView.addSubview(newView) } }
标签: ios swift uiview uiviewcontroller swift4