加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 更新UILabel文本重置故事板?

发布时间:2020-12-14 18:00:46 所属栏目:百科 来源:网络整理
导读:我遇到了一个奇怪的场景,我自己无法理解. 我开始了一个小测试场景,几乎是空的iOS单视图应用程序和故事板.故事板包含一个标签和单个UIView,10×10,仅用于呈现问题.当然,他们已经分配和连接了适当的IBOutlets: @property (nonatomic,weak) IBOutlet UILabel *
我遇到了一个奇怪的场景,我自己无法理解.

我开始了一个小测试场景,几乎是空的iOS单视图应用程序和故事板.故事板包含一个标签和单个UIView,10×10,仅用于呈现问题.当然,他们已经分配和连接了适当的IBOutlets:

@property (nonatomic,weak) IBOutlet UILabel *label;
@property (nonatomic,weak) IBOutlet UIView *dot;

在(void)viewDidLoad方法中,我启动一个计时器并将其添加到运行循环中,如下所示:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSTimer * timer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(doSomething) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
}

在(void)doSomething方法中,我执行以下操作:

-(void)doSomething {
    // Lets move the dot to the right a bit further
    _dot.center = CGPointMake(_dot.center.x+1,_dot.center.y);

    // About every ten steps,update the label with the current
    // X position,to better show the problem
    CGFloat moduloResult = (float)((int)_dot.center.x % (int)10.0);
    if(moduloResult <= 0)
        _label.text = [NSString stringWithFormat:@"%f",_dot.center.x+1];
}

所以基本上,我每次更改小10×10点视图的中心为1,每10次更新标签以显示当前的X位置.就此而言,我更新标签文本并不重要,重要的是它会发生变化.我每10次只更改一次文本,以便更好地显示问题.

如果我运行该代码,则点会按预期向右移动,但是当我更新标签文本时,点视图会重置并跳回其原始位置.所以更新我的标签文本会重置我在Storyboard上的其他视图,这完全让我感到困惑.

有人可以复制甚至解释它吗?

谢谢大家,提前:)

亚历克斯

解决方法

我能够重现所描述的行为,这就是它发生的原因:

>默认情况下,元素的位置由自动生成的AutoLayout约束确定
>当更改点的位置时,您只更新它的当前帧,而不是更新基础约束
>更改UILabel的文本可能会更改UILabel内容的大小,因此需要重新计算其框架.这里基于约束重新计算整个布局,因此也重新设置点的帧.

为了解决,我建议正确指定AutoLayout约束并直接更新它们而不是位置.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读