UIView的帧起源和大小是只读的逻辑是什么

时间:2012-05-22 21:59:31

标签: objective-c ios uiview

我知道如果你想调整UIView的大小,你必须这样做:

CGRect frame = view.frame;
frame.size.height -= 100;
view.frame = frame;

而不只是:

view.frame.size.height -= 100;

我的问题是这背后的逻辑是什么? frame的设定者是否做了额外的事情,比如打电话给setNeedsDisplay

1 个答案:

答案 0 :(得分:3)

基本上背后的原因是以下一行

view.frame.size.height -= 100;

实际上做了以下两件事:

  1. 调用返回[view frame]结构的CGRect方法 - 复制视图中存储的内容
  2. 然后它会更改副本的height字段 - 因此它不会影响视图中存储的结构的值
  3.   

    框架的设定者是否做了额外的事情,比如可能打电话   setNeedsDisplay?

    实际上是 - 视图的frame属性是根据其原点,边界和变换计算的,因此设置框架也会影响其原点和边界(并且取决于视图的contentMode可能会强制视图重绘)