ios – 自定义视图 – self.frame不正确?

ios – 自定义视图 – self.frame不正确?,第1张

概述所以我有一个自定义的UIView类 class MessageBox: UIView { override init(frame: CGRect) { super.init(frame: frame) createSubViews() } required init?(coder aDecoder: NSCoder) { su 所以我有一个自定义的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)    }}

我在故事板中添加了一个UIVIEw并给它一些限制:

100 from the top (supervIEw),0 from the left and right,height is 180

但是当我运行应用程序时,我在代码中创建的棕色子视图是很大的.我在自定义视图中打印了self.frame,结果是框架为(0,1000,1000).但为什么?我设置了约束,它应该是(0,deviceWith,180).

我做错了什么?

编辑:这是我的故事板设置:

@L_403_1@

解决方法 简短回答:

你做得太早了.

详细解答:

从Interface Builder文件(xib或故事板)初始化视图时,其框架最初设置为Interface Builder中的框架.您可以将其视为临时占位符.

使用自动布局时,在视图的layoutSubvIEws()方法中解析约束(=计算视图的实际帧).

因此,您的问题有两种可能的解决方案:

>(首选)如果使用自动布局,请在整个视图中使用它.

>也可以在Interface Builder中添加testVIEw并为其创建一个插座
>或者像在您的代码中一样在代码中创建testVIEw,然后将其translatesautoResizingMaskIntoConstraints属性设置为false(以“激活自动布局”排序)并在代码中为其添加所需的约束.

>在布局引擎设置MessageBox视图的框架后,设置testVIEw的框架.您可以确定系统已从约束中解析视图框架的唯一位置是调用layoutSubvIEws()时.

overrIDe func layoutSubvIEws() {    super.layoutSubvIEws()    testVIEw.frame = self.frame}

(当然,您需要将testVIEw声明为属性/全局变量.)

总结

以上是内存溢出为你收集整理的ios – 自定义视图 – self.frame不正确?全部内容,希望文章能够帮你解决ios – 自定义视图 – self.frame不正确?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1102551.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存