更新:由于我无法解决此问题,我做了一个丑陋的解决方法(添加了另一个标签)。
我目前正在尝试在以下步骤中设置UILabel的位置:
1)更新标签文本
lblFirstWheelDescription.text = @"Select the tooth shade";
2)为UILabel设置新位置
CGRect newframe = lblFirstWheelDescription.frame;
newframe.origin.y += 100;
lblFirstWheelDescription.frame = newframe;
现在令我困惑的是什么。当第一次调用该方法时,没有任何事情发生(UILabel不会像以前那样移动)。在第二次调用(相同方法)时,lblFirstWheelDescription.frame的初始y值没有增加100.在第二次方法调用的另一次设置y值之后,标签移动并且y值增加。
我试图强制重绘如下 - 不会改变任何东西:
[self.superview setNeedsLayout];
有人知道这种行为或知道这里有什么不对吗?
ihkawiss
答案 0 :(得分:0)
也许你假设你的功能被调用了,实际上它不是?尝试添加日志语句NSLog("TESTING");
以查看调用函数的时间和次数。
还有什么叫这个功能?
答案 1 :(得分:0)
你必须重新绘制标签。 viewconilla重绘其视图时的viewwillappear调用。您必须强制在视图上重绘标签。
答案 2 :(得分:0)
我在过去注意到,更改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 animateWithDuration:animations],从CGRect实例1到CGRect实例2,您可以为此更改设置动画...您不能只修改现有框架的属性。
答案 3 :(得分:0)
您可以根据需要更新标签,但是您必须在此循环中重绘标签,并在此link
中显示检查Mert答案
答案 4 :(得分:0)
您需要从视图控制器调用setNeedsDisplay
[ViewController.view setNeedsDisplay];
这将强制您的视图及其子视图更新/重绘