重绘UILabel

时间:2013-03-08 10:04:01

标签: ios objective-c xcode

更新:由于我无法解决此问题,我做了一个丑陋的解决方法(添加了另一个标签)。

我目前正在尝试在以下步骤中设置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

5 个答案:

答案 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];

这将强制您的视图及其子视图更新/重绘