objective-c - UIView 的 frame origin 和 size 是只读的背后的逻辑是什么

标签 objective-c ios uiview

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

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

而不仅仅是:
view.frame.size.height -= 100;

我的问题是这背后的逻辑是什么?是 frame 的二传手做一些额外的事情,比如打电话 setNeedsDisplay ?

最佳答案

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

view.frame.size.height -= 100;

实际上做了以下两件事:
  • 调用[view frame]返回 CGRect 的方法结构 - 复制 View 中存储的内容
  • 然后它更改 height副本的字段 - 因此它不会影响存储在 View 中的结构的值

  • Is the setter for frame doing something extra, like maybe call setNeedsDisplay ?



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

    关于objective-c - UIView 的 frame origin 和 size 是只读的背后的逻辑是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710793/

    相关文章:

    ios - 检查 Firebase 存储的更新并替换旧内容?

    iphone - 如何使用 Interface Builder 在其他 UI 元素的背景中添加 UIButton?

    ios - 将数据放入 UIView 容器中的嵌入式 TableView 中

    objective-c - 我怎样才能用 CoreGraphics 画一条线,它的踪迹会在一定长度后开始消失?

    objective-c - 更改导航栏色调颜色

    objective-c - 继承的@property 不能满足 <protocol> @property 吗?

    ios - iOS 中的绘制矩形

    ios - 如何以编程方式创建 NSComboBox

    ios - 带阴影的 UIView - 应用 renderInContext 时速度较慢

    iphone - 在 2D 场景上创建 "magnifying glass"的最佳方法是什么?