[新手提问] 关于在子视图中创建其他视图遇到的问题

我在一个主视图上创建了一个子视图 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在位置上有特殊的关系,那么两种写法哪种更好呢?

代码是写给人看的,顺便给机器运行一下。
PJHubs
最佳答案

Q:第一种写法是被允许的吗?

A:对,这是被允许的。

Q:如果子视图 a 和文本输入框 b 在位置上有特殊的关系,那么两种写法哪种更好呢?

A:有特殊关系没问题,只是你的 textView 计算坐标时依赖了 self.view 的宽高,导致当 textView 添加到 bottomView 上时,超出了 bottomView 的显示区域,你应该使用 bottomView 的宽高去计算,而不是 self.view 的宽高。

如果你想省事,可以通过 textView.superview 来进行获取 textView 所依赖的父视图进行计算,但是不推荐,因为这样就不能明确的从代码层面上看出各个视图之间的依赖关系。

4年前 评论
luci (楼主) 4年前
讨论数量: 1
PJHubs

Q:第一种写法是被允许的吗?

A:对,这是被允许的。

Q:如果子视图 a 和文本输入框 b 在位置上有特殊的关系,那么两种写法哪种更好呢?

A:有特殊关系没问题,只是你的 textView 计算坐标时依赖了 self.view 的宽高,导致当 textView 添加到 bottomView 上时,超出了 bottomView 的显示区域,你应该使用 bottomView 的宽高去计算,而不是 self.view 的宽高。

如果你想省事,可以通过 textView.superview 来进行获取 textView 所依赖的父视图进行计算,但是不推荐,因为这样就不能明确的从代码层面上看出各个视图之间的依赖关系。

4年前 评论
luci (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!