Qua*_*ntm 8 storyboard uiview ios swift
所以我有一个自定义的UIView类
class MessageBox: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
createSubViews()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
createSubViews()
}
func createSubViews() {
let testView = UIView(frame: self.frame)
testView.backgroundColor = UIColor.brown
self.addSubview(testView)
}
}
Run Code Online (Sandbox Code Playgroud)
我在故事板中添加了一个UIView并给它一些约束:
从顶部100(superview),从左和右0,高度是180
但是当我运行应用程序时,我在代码中创建的棕色子视图是很大的.我self.frame在我的自定义视图中打印,结果表明框架是(0,0,1000,1000).但为什么?我设置约束,应该是这样的(0,0,deviceWith, 180).
我做错了什么?
编辑:这是我的故事板设置:
Mis*_*cha 18
你做得太早了.
从Interface Builder文件(xib或storyboard)初始化视图时,其框架最初设置为Interface Builder中的框架.您可以将其视为临时占位符.
使用自动布局时,在视图的layoutSubviews()方法中解析约束(=计算视图的实际帧).
因此,您的问题有两种可能的解决方案:
(首选)如果您使用自动布局,请在整个视图中使用它.
testView在Interface Builder中添加它并为其创建一个插座testView像你一样创建代码,然后将其translatesAutoResizingMaskIntoConstraints属性设置为false(以激活"自动布局")并在代码中为其添加所需的约束.在布局引擎设置视图的框架本身testView后设置您的框架MessageBox.您可以确定系统已从约束中解析视图框架的唯一位置layoutSubviews()是调用时.
override func layoutSubviews() {
super.layoutSubviews()
testView.frame = self.frame
}
Run Code Online (Sandbox Code Playgroud)
(当然,你需要声明你testView的属性/全局变量.)
| 归档时间: |
|
| 查看次数: |
9752 次 |
| 最近记录: |