【发布时间】:2015-05-29 07:08:00
【问题描述】:
我遇到了一个奇怪的场景,我自己无法弄清楚。
我开始了一个小测试场景,其中包含一个几乎空的 iOS 单视图应用程序和一个故事板。故事板包含一个标签和单个 UIView,10x10,仅用于展示问题。当然,他们分配并连接了适当的 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];
}
所以基本上,我每次将小 10x10 点视图的中心更改 1,并且每 10 次更新标签以显示当前 X 位置。就此而言,我更新标签文本的内容甚至都无关紧要,重要的是它会发生变化。而且我只每 10 次更改一次文本以更好地显示这里的问题。
如果我运行该代码,点会按预期向右移动,但是当我更新标签文本时,点视图会重置并跳回原来的位置。所以更新我的标签文本会重置我在情节提要上的其他视图,这完全让我感到困惑。
有人可以重现甚至解释吗?
谢谢大家,提前:)
亚历克斯
【问题讨论】:
-
您是否在情节提要中设置了一些 AutoLayout 约束?顺便说一句,喜欢这个
(int)10.0 -
我没有设置任何特定的 AutoLayout 约束,所以视图有默认设置。
-
也许你有一些自动布局约束,你没有设置它的框架,对吧?
-
很有可能。没错,我没有明确设置它的框架。我只是将它放在情节提要上,其余部分默认保留。我只是不知道视图的默认 AutoLayout 约束是否会导致这种行为。有人知道吗?
-
你能把你的故事板作为截图贴在这里吗?
标签: ios objective-c iphone xcode uilabel