iOS框架改变一个属性(例如宽度)

标签 ios objective-c cgrect cgrectmake

这个问题最初是针对 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/

相关文章:

ios - 如何在 Root View Controller (PFQueryTableViewController)尝试没有用户的查询并使程序崩溃之前显示登录屏幕

ios - 呈现 UIImagePicker View 时检测设备旋转

ios - 处理程序远程通知背景

ios - UICollectionView、分页和 clipsToBounds

ios5 - iOS : Programmatically creating UIWindow results in wrong position

iphone - CoreGraphics 图像调整大小

ios - 带有自定义字体的 UITextField secureTextEntry 项目符号?

uibutton - Swift iOS-如何将按钮添加到 CollectionView 单元格外部

ios - 如何使用 GraphicContext 在 Objective C 中获得锥形线笔刷效果

ios - 在 swift 4 中的类之间移动数据