更新:由于我无法解决这个问题,我做了一个丑陋的解决方法(添加了另一个标签)。
目前,我正试图在以下步骤中设置UILabel的位置:
1)更新标签的文本
lblFirstWheelDescription.text = @"Select the tooth shade";2)为UILabel设置新的位置
CGRect newframe = lblFirstWheelDescription.frame;
newframe.origin.y += 100;
lblFirstWheelDescription.frame = newframe;现在让我困惑的是。当第一次调用该方法时,什么都不会发生(UILabel不像以前的set那样移动)。在第二个调用(相同的方法)中,lblFirstWheelDescription.frame的初始y值没有增加100.在第二个方法调用时再次设置y-值后,标签移动,y-值增加。
我试图强制重新油漆如下-没有改变任何东西:
[self.superview setNeedsLayout];有没有人知道这种行为,或者知道这里出了什么问题?
伊卡维斯
发布于 2013-03-08 10:09:43
也许你是在假设你的函数是被调用的,而实际上它不是?尝试添加一个日志语句NSLog("TESTING");,以查看何时和多少次调用您的函数。
另外,什么叫这个函数?
发布于 2013-03-08 10:10:33
你得重新画标签。当视图控制器重新绘制视图时,视图将出现调用。你必须强制在视图上重新绘制标签。
发布于 2013-04-03 22:53:35
我注意到,在过去,更改CGRect的属性并不会使UI元素更新:
UILabel *label = [UILabel alloc] initWithFrame:CGRectMake(0,0,100,20)];
label.frame.size.width += 100; // does nothing要使此操作正确,您需要创建一个新的CGRect,并将其分配给frame属性,而不是试图修改现有框架对象的值(这正是原始代码所做的)。
label.frame = CGRectMake(0, 0, 200, 20);如果您喜欢使用UIView动画,您可以动画化:动画非常容易,从CGRect实例1到CGRect实例2.不能只修改现有帧的属性。
https://stackoverflow.com/questions/15291344
复制相似问题