在iOS中设置帧的原点
我试图以编程方式设置框架的原点 方法1:在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 =
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;