Ios 调用UILabel SetText后,UITableViewCell中的移动视图将重置
我有一个带有自定义Ios 调用UILabel SetText后,UITableViewCell中的移动视图将重置,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个带有自定义UITableView单元格的UITableView。在这个UITableViewCell中有一些UILabels和一个UIView来包含一些元素。我的布局如下所示: |-TableCell |-ContentView |-containerView | |- assignTime (UILabel) | |- assignIcon (UIImage) | |- secondaryAssignT
UITableView单元格的UITableView
。在这个UITableViewCell
中有一些UILabel
s和一个UIView
来包含一些元素。我的布局如下所示:
|-TableCell
|-ContentView
|-containerView
| |- assignTime (UILabel)
| |- assignIcon (UIImage)
| |- secondaryAssignTime (UILabel)
| |- secondaryAssignIcon (UIImage)
|-Button 1
MyUILabels
绑定到一个NSTimer
上,设置为每半秒启动一次。计时器显示设定时间和现在之间的差异。所有这些都很好用。当我移动容器视图
时会出现问题,我可以很好地移动它,但只要NSTimer
触发并更新计时器标签中的文本,视图就会重置回其原始位置。现在,这只会发生在文本中,如果我更新了图像,没有异常情况发生,容器视图将保持在我放置它的位置
下面是我用来更新容器视图的
位置的代码:
-(void) updateIndent{
int indent = 20;
CGRect f = self.contentView.frame;
f.size.width = f.size.width - self.myUnit.depth * indent;
f.origin.x = f.origin.x + self.myUnit.depth * indent;
self.containerView.frame = f;
[self.containerView updateConstraints];
}
以及用于更新计时器和图像的代码:
-(void) updateCountdown{
Assignment *a = [self.myUnit getPrimaryAssignment];
if(a){
[self.assignTime setText:[a getTimeRemaining]];
[self.assignIcon setBackgroundImage:[a getIcon] forState:UIControlStateNormal];
} else {
[self.assignTime setText:@""];
[self.assignIcon setBackgroundImage:nil forState:UIControlStateNormal];
}
Assignment *s = [_myUnit getSecondaryAssignment];
if(s){
[self.secondaryAssignTime setText:[s getTimeRemaining]];
[self.secondaryAssignIcon setBackgroundImage:[s getIcon] forState:UIControlStateNormal];
} else {
[self.secondaryAssignTime setText:@""];
[self.secondaryAssignIcon setBackgroundImage:nil forState:UIControlStateNormal];
}
}
因此,总而言之,当我调用updateIndent
时,视图会按预期更新。当我调用updateCountdown
时,如果调用setText
方法,视图将重置回其原始位置
编辑
我尝试将所有内容移出containerView
之外,但仍然有相同的效果。我还试着用一个文本字符串替换它,看看它是否与我的getTimeRemaining
有关,但仍然是一样的。我更新我的文本,containerView
重置其位置
编辑2
我添加了一些断点,以查看是否可以准确地看到视图何时重置自身。我在这些行中添加了断点
Assignment *a = [self.myUnit getPrimaryAssignment];
Assignment *s = [_myUnit getSecondaryAssignment];
[self.secondaryAssignIcon setBackgroundImage:[s getIcon] forState:UIControlStateNormal];
在updateIndent
[self.containerView updateConstraints];
我发现在这些地方,视图都不会移动到新的位置。理论上,视图应该在调用updateCountdown
时更新
编辑3
我决定在NSTimer
中的updateCountdown
之后调用updateIndent
。我发现视图只在文本更改时更新,而不只是在调用setText
时更新。因此,我对事件的顺序有了更好的理解
updateIndent
被调用,视图获得其新位置
计时器触发并调用updateCountdown
将计时器文本设置为“00:00”,以清除缩进
调用updateIndent
来设置缩进
计时器触发并调用updateCountdown
将计时器文本设置为“00:00”缩进不变
调用updateIndent
来设置缩进
计时器触发并调用updateCountdown
将计时器文本设置为“00:01”,以清除缩进
我终于把这个修好了。我为正在编辑的约束创建了一个出口。因此,我没有使用上面描述的updateIndent
方法,而是对其进行了修改,只更新了一个约束
self.indentMargin.constant = self.myUnit.depth * indent;