首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重涂UILabel

重涂UILabel
EN

Stack Overflow用户
提问于 2013-03-08 10:04:01
回答 5查看 2.5K关注 0票数 0

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

目前,我正试图在以下步骤中设置UILabel的位置:

1)更新标签的文本

代码语言:javascript
复制
lblFirstWheelDescription.text = @"Select the tooth shade";

2)为UILabel设置新的位置

代码语言:javascript
复制
CGRect newframe = lblFirstWheelDescription.frame;
newframe.origin.y += 100;
lblFirstWheelDescription.frame = newframe;

现在让我困惑的是。当第一次调用该方法时,什么都不会发生(UILabel不像以前的set那样移动)。在第二个调用(相同的方法)中,lblFirstWheelDescription.frame的初始y值没有增加100.在第二个方法调用时再次设置y-值后,标签移动,y-值增加。

我试图强制重新油漆如下-没有改变任何东西:

代码语言:javascript
复制
[self.superview setNeedsLayout];

有没有人知道这种行为,或者知道这里出了什么问题?

伊卡维斯

EN

回答 5

Stack Overflow用户

发布于 2013-03-08 10:09:43

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

另外,什么叫这个函数?

票数 0
EN

Stack Overflow用户

发布于 2013-03-08 10:10:33

你得重新画标签。当视图控制器重新绘制视图时,视图将出现调用。你必须强制在视图上重新绘制标签。

票数 0
EN

Stack Overflow用户

发布于 2013-04-03 22:53:35

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

代码语言:javascript
复制
UILabel *label = [UILabel alloc] initWithFrame:CGRectMake(0,0,100,20)];
label.frame.size.width += 100; // does nothing

要使此操作正确,您需要创建一个新的CGRect,并将其分配给frame属性,而不是试图修改现有框架对象的值(这正是原始代码所做的)。

代码语言:javascript
复制
label.frame = CGRectMake(0, 0, 200, 20);

如果您喜欢使用UIView动画,您可以动画化:动画非常容易,从CGRect实例1到CGRect实例2.不能只修改现有帧的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15291344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档