Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS中设置帧的原点_Ios_Frame - Fatal编程技术网

在iOS中设置帧的原点

在iOS中设置帧的原点,ios,frame,Ios,Frame,我试图以编程方式设置框架的原点 方法1: button.frame.origin.y = 100; 方法2: CGRect frame = button.frame; frame.origin.y = 100; 我尝试了方法1,但它不起作用(显示一个错误,表示表达式不可赋值)。方法2正在发挥作用。为什么会这样 需要指导我做对了什么 你知道吗 按钮.frame.origin.y返回一个值 如果你正在使用这个,那么你会得到这个错误 表达式不可赋值。 button.frame.origin.y =

我试图以编程方式设置框架的原点

方法1:

button.frame.origin.y = 100;
方法2:

CGRect frame = button.frame;
frame.origin.y = 100;
我尝试了方法1,但它不起作用(显示一个错误,表示表达式不可赋值)。方法2正在发挥作用。为什么会这样

需要指导我做对了什么

你知道吗
按钮.frame.origin.y
返回一个值

如果你正在使用这个,那么你会得到这个错误

表达式不可赋值。

button.frame.origin.y = 100;
所以这是正确的方法

CGRect frame = button.frame;
frame.origin.y = 100;
否则你可以这样做

button.frame = CGRectMake(button.frame.origin.x, 100, button.frame.size.width, button.frame.size.height)

这是因为,如果您能够直接更改帧的原点或大小,您将绕过UIView的帧属性的setter方法。由于多种原因,这将是不好的


UIView将没有机会收到有关其框架更改的通知。但它必须知道这些更改,才能更新其子视图或重新绘制自身。

无法执行方法1的原因是帧的单个属性是只读的。但是,整个帧本身是可写/可分配的,因此您可以执行方法2

你甚至可以做这样的把戏:

CGRect newFrame = button.frame;
newFrame.origin.y += 100; // add 100 to y's current value
button.frame = newFrame;
等于以下调用:

[button getFrame].origin.y = 100;
其中
[button getFrame]
提供复制的
CGRect

您正在尝试设置结构的一个变量。从
ui视图
到结构没有指针(因为它是基本的
C结构
,所以无法指向)。因此,改为复制


因此,基本上,您是在复制结构并进行设置。但是,这根本不起作用。

是的。。另一方面,你也可以这样做。button.frame=CGRectMake(button.frame.origin.x,100,button.frame.size.width,button.frame.size.height),如错误所述-视图的框架属性不可分配。只有框架本身是可分配的。所以你只需要坚持方法2。那么只有方法2?还有其他方法吗?对于UIView,frame(CGRect)是R/W并且
frame。origin
是只读的。不确定。。。差不多4年前的答案。问题是什么?简而言之,这行代码是编译错误的。但我仍然不明白这个属性不是只读的。我找到了这条线索,可以解决我的困惑。
[button getFrame].origin.y = 100;