使用点运算符设置frame.size

SRI*_*IYA 2 objective-c

我有一个UIController,你知道UIController它与一个视图相关联,你可以使用合成的getter和setters方法访问它

UIController controller = init code ..
Run Code Online (Sandbox Code Playgroud)

.. controller.view- >这给了我UIView保留和自动释放的对象,这将是合成的get方法(如果我合成的getmethod理解是正确的)

controller.view.frame -> this gives me my CGRect struct

controller.view.frame.size -> CGSize struct
Run Code Online (Sandbox Code Playgroud)

为什么我不能直接为这个帧结构赋值

controller.view.frame.size.width = 20;
Run Code Online (Sandbox Code Playgroud)

对于上面的语句,我收到此错误"左值作为赋值的左操作数需要左值"

这是一个普通的c点运算符,我认为它应该可以工作.如果我遗漏任何东西请指教

Mat*_*ing 7

在这种情况下使用点运算符是frame在幕后使用getter方法.由于frame属性是一个CGRect简单的C结构,因此frame返回值的副本,而不是指向该值的指针.更改它将修改您在堆栈上本地复制的CGRect,而不是视图的frame属性的CGRect.要更新实际的帧属性,您必须通过setter方法[yourView setFrame:yourNewFrame];yourView.frame = yourNewFrame;.