[新手提问] 关于在子视图中创建其他视图遇到的问题
我在一个主视图上创建了一个子视图 bottom_view
,然后想在这个子视图上创建一个 textview
。代码如下:(只贴了关键代码)
let bottom_view = UIView(frame: CGRect(x: 0,y: self.view.frame.size.height - 56,width: self.view.frame.size.width,height: 56))? ? ? ? bottom_view.backgroundColor = UIColor(white: 0.95, alpha: 0.7)
message_field = UITextView(frame: CGRect(x: 10,y: self.view.frame.size.height - 48,width: self.view.frame.size.width - 20,height: 40))
bottom_view.addSubview(message_field)
self.view.addSubview(bottom_view)
但是最终这个 textview
并没有被渲染出来,当我改为:
self.view.addSubview(bottom_view)
self.view.addSubview(message_field)
就可以了。
我对以上第一种写法的理解是一个逐层包含的关系,这也是符合我的预期需求的,但是第二种写法展示出了同样的效果,所以有两个问题想问大家:
1、第一种写法是被允许的吗?
2、如果子视图a和文本输入框b在位置上有特殊的关系,那么两种写法哪种更好呢?
Q:第一种写法是被允许的吗?
A:对,这是被允许的。
Q:如果子视图 a 和文本输入框 b 在位置上有特殊的关系,那么两种写法哪种更好呢?
A:有特殊关系没问题,只是你的
textView
计算坐标时依赖了self.view
的宽高,导致当textView
添加到bottomView
上时,超出了bottomView
的显示区域,你应该使用bottomView
的宽高去计算,而不是self.view
的宽高。如果你想省事,可以通过
textView.superview
来进行获取textView
所依赖的父视图进行计算,但是不推荐,因为这样就不能明确的从代码层面上看出各个视图之间的依赖关系。