这个问题最初是针对 Objective-c 编程语言提出的。在撰写本文时,Swift 甚至还不存在。
问题
是否可以只更改 CGRect
的 一个 属性?
例如:
self.frame.size.width = 50;
而不是
self.frame = CGRectMake(self.frame.origin.x,
self.frame.origin.y,
self.frame.size.width,
50);
当然我知道 self.frame.size.width
是只读 所以我想知道如何做到这一点?
CSS ANALOGY 后果自负
对于那些熟悉CSS
的人来说,这个想法与使用非常相似:
margin-left: 2px;
而不必更改整个值:
margin: 5px 5px 5px 2px;
最佳答案
回答您最初的问题:是的,可以只更改 CGRect
结构的一个成员。此代码不会引发任何错误:
myRect.size.width = 50;
然而,不可能是改变 CGRect
的单个成员,该成员本身就是另一个对象的属性。在这种非常常见的情况下,您将不得不使用临时局部变量:
CGRect frameRect = self.frame;
frameRect.size.width = 50;
self.frame = frameRect;
这样做的原因是使用属性访问器 self.frame = ...
等效于 [self setFrame:...]
并且此访问器始终期望一个完整的 CGRect
。在这种情况下,将 C 风格的 struct
访问与 Objective-C 属性点表示法混合使用效果不佳。
关于iOS框架改变一个属性(例如宽度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9537573/