0

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

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

有人知道这种行为或知道这里有什么问题吗?

伊卡威斯

4

5 回答 5

0

我过去注意到更改 CGRect 的属性不会使 UI 元素更新:

UILabel *label = [UILabel alloc] initWithFrame:CGRectMake(0,0,100,20)];
label.frame.size.width += 100; // does nothing

为了使其正常工作,您需要创建一个新的 CGRect 并将其分配给 frame 属性,而不是尝试修改现有 frame 对象的值(这是您的原始代码正在执行的操作)。

label.frame = CGRectMake(0, 0, 200, 20);

如果您喜欢轻松地使用 [UIView animateWithDuration:animations],则可以动画此更改,从 CGRect 实例 1 到 CGRect 实例 2...您不能只修改现有框架的属性。

于 2013-04-03T22:53:35.303 回答
0

也许您假设您的函数正在被调用,而实际上它不是?尝试添加一条日志语句NSLog("TESTING");以查看您的函数被调用的时间和次数。

另外,调用这个函数是什么?

于 2013-03-08T10:09:43.957 回答
0

您必须重新绘制标签。当 viewcontroller 重绘其视图时 viewwillappear 调用。您必须强制在视图上重绘标签。

于 2013-03-08T10:10:33.047 回答
0

您可以根据需要更新标签,但您必须在此循环中重绘要从此链接显示的标签

检查 Mert 答案

于 2014-03-11T18:00:16.240 回答
0

您需要从视图控制器调用 setNeedsDisplay

[ViewController.view setNeedsDisplay];

这将迫使您的视图及其子视图更新/重绘

于 2016-02-02T03:43:52.680 回答