Ios 重新油漆UILabel

Ios 重新油漆UILabel,ios,objective-c,xcode,Ios,Objective C,Xcode,更新:由于我无法解决此问题,我做了一个难看的解决方法(添加了另一个标签) 我目前正在尝试通过以下步骤设置UILabel的位置: 1) 更新标签的文本 lblFirstWheelDescription.text = @"Select the tooth shade"; 2) 为UILabel设置新位置 CGRect newframe = lblFirstWheelDescription.frame; newframe.origin.y += 100; lblFirstWheelDescripti

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

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

也许您假设您的函数正在被调用,而实际上它没有被调用?尝试添加日志语句
NSLog(“测试”)
查看函数被调用的时间和次数


另外,调用此函数的是什么?

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

我以前注意到,更改CGRect的属性不会使UI元素更新:

UILabel *label = [UILabel alloc] initWithFrame:CGRectMake(0,0,100,20)];
label.frame.size.width += 100; // does nothing
要使其正常工作,您需要创建一个新的CGRect并将其指定给frame属性,而不是尝试修改现有frame对象的值(这是原始代码正在执行的操作)


如果您喜欢使用[UIView animateWithDuration:animations]非常简单,您可以设置此更改的动画,从CGRect实例1到CGRect实例2。。。您不能仅修改现有框架的属性。

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


检查Mert应答

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

[ViewController.view setNeedsDisplay];

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

您能否解释一下如何“强制在视图上重新绘制标签”?您可以通过通知重新绘制。如果方向改变,则整个视图将重新绘制。您可以在没有任何代码的情况下调用这些方法。但是你也可以试试这个,你能告诉我什么时候你想移动标签,什么时候你的标签不移动吗?点击GestureEvent action=>设置新的帧。在此操作期间或之后,UILabel应按设置移动。那么问题是什么?当您点击或调用方法时,您的方法没有被调用,但标签没有移动?正如我在上面写的,方法被调用,新框架被设置。但是UILabel只有在第二次调用后才会重新绘制。-(iAction)moveLabel:(id)发送方{CGRect newframe=lblFirstWheelDescription.frame;NSLog(@“be4 y====%f”,newframe.origin.y);newframe.origin.y+=100;newframe.size.width+=400;NSLog(@“y=====%f”,newframe.origin.y);lblfirstwheelsdescription.frame=newframe;lblfirstwheelsdescription.text=@“选择牙齿阴影”}在调用tap时尝试调用此选项,并让我知道发生了什么
[ViewController.view setNeedsDisplay];