小编aci*_*ris的帖子

iOS 8:UITableViewCell详细文本无法正确更新

tl; dr:我可以让detailTextLabel通过iOS中的自动布局系统更新其大小吗?

自iOS 8以来,是否有其他人在UITableViewCell中遇到了detailText标签的问题?

我有一个表格,其中包含文字和细节字符串.最初的详细文本是一个空字符串(@"").在将故事板segue执行到编辑屏幕后,我返回一个新的详细文本值并更新它.我尝试在viewWillAppear中重新加载表,以便在返回上一个视图后立即显示该值.

表格视图再次可见后,表格单元格已将文本字段向上移动以为详细文本腾出空间,但不显示任何明细文本.在我返回编辑屏幕并再次返回之前,文本不会显示.

我做了什么来排除故障:看起来我认为细节文本标签的自动布局没有正确更新,并且记录detailTextLabel框架的大小和构成证实了这一点.

我可以通过在viewDidAppear中运行[table reloadData]来强制更新文本,但是这会让我感觉不到我喜欢的闪烁效果,并且看起来不专业.

编辑:我做过的其他事情:我还强迫detailTextLabel使用[cell.detailTextLabel sizeToFit]重新调整自身大小.这导致它显示,但在单元格中以奇数方式偏移.再次进入编辑页面后,detailTextLabel会修复它的位置.

我已经创建了一个简单的项目作为github repo,以准确显示我正在处理的内容:

https://github.com/acidaris/ios8_table_issue

我正在使用的视图控制器的主要代码也在下面.

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.table reloadData]; 
}


- (NSInteger)tableView:(UITableView *)tableView
    numberOfRowsInSection:(NSInteger)section {
    return 1; 
}

- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {  
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];

    cell.textLabel.text = @"This is a test";
    cell.detailTextLabel.text = self.value;

    CGRect frame = cell.detailTextLabel.frame;
    NSLog(@"detailTextLabel x=%f y=%f width=%f height=%f",
        frame.origin.x,frame.origin.y,frame.size.width,frame.size.height);
    return cell; 
}
Run Code Online (Sandbox Code Playgroud)

该单元格在StoryBoard中进行原型化,因此始终定义由dequeueReusableCellWithIdentifier:选择的单元格.此外,故事板中的单元格类型设置为字幕,如果定义了初始值,它会显示.

如果有人能帮我解决这个问题,我将非常感激.

部分解决方案

如果要对UITableViewCell进行子类化,则可以在布局完成后修改detailTextLabel的框架.这就是我所做的,它似乎有效,但在6加上,我在textLabel和detailTextLabel之间得到了一个奇怪的分界线.编辑:(我已经调整了这个.)我不喜欢这个解决方案,但到目前为止,这是我遇到的最好的.它在呈现视图后不会更新,并且相对简单.如上所述,我将继续寻找更好的解决方案.

- (void)layoutSubviews {
  [super layoutSubviews]; 
  CGRect textFrame …
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview viewwillappear ios autolayout

18
推荐指数
3
解决办法
1万
查看次数