ios 8 UITableViewCell细节文本没有正确更新
编辑:tl;博士:我可以导致detailTextLabel的大小由iOS中的自动布局系统更改值?
编辑2:我有一个部分的解决scheme,但将继续寻找一个更好的。 见下文。
自从iOS 8以来,其他人在UITableViewCell中的detailText标签有问题吗?
我有一个文本和详细string的表。 最初细节文本是一个空string(@“”)。 在向编辑屏幕执行故事板顺序之后,我将返回一个新的细节文本值并更新它。 我尝试在viewWillAppear中重新加载表,以便在返回到前一个视图时立即显示该值。
一旦表格视图再次可见,表格单元格将文本字段向上移动,以便为详细文本腾出空间,但不显示详细文本。 直到我回到编辑屏幕,文本才会显示,然后再回来。
我所做的解决方法:它看起来像细节文本标签的自动布局没有正确更新,因为我认为它应该,并loggingdetailTextLabel框架的大小和化妆确认这一点。
我可以通过在viewDidAppear中运行[table reloadData]来强制更新文本,但是这会给我带来一个我不喜欢的闪烁效果,而且看起来不专业。
编辑:我已经做了其他的事情:我也已经强制detailTextLabel使用[cell.detailTextLabel sizeToFit]重新调整自己的大小。 这导致它显示,但在单元格中以奇怪的方式偏移。 在再次进入编辑页面后,detailTextLabel修复了它的位置。
我创build了一个简单的项目作为github回购,以显示我正在处理的是什么:
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=%fy=%f width=%f height=%f", frame.origin.x,frame.origin.y,frame.size.width,frame.size.height); return cell; }
单元格在StoryBoard中原型化,所以dequeueReusableCellWithIdentifier:选中的单元格总是被定义的。 此外,故事板内的单元格types设置为字幕,如果定义了初始值,则显示该单元格。
如果有人能帮我解决这个问题,我会非常感激。
部分解决scheme
如果您正在对UITableViewCell进行子分类,则可以在布局完成时修改detailTextLabel的框架。 这是我所做的,似乎工作, 但在6加,我得到了textLabel和detailTextLabel之间的一个奇怪的分界线。 编辑:(我调整了这一点)。我不喜欢这个解决scheme,但迄今为止,这是我遇到的最好的。 呈现视图后不会更新,而且相对简单。 正如我上面所说,我会继续寻找更好的解决scheme。
- (void)layoutSubviews { [super layoutSubviews]; CGRect textFrame = self.textLabel.frame; [self.detailTextLabel sizeToFit]; CGFloat x = textFrame.origin.x; CGFloat y = textFrame.origin.y + textFrame.size.height; CGSize detailSize = self.detailTextLabel.frame.size; CGRect newFrame = CGRectMake(x, y, detailSize.width, detailSize.height); self.detailTextLabel.frame = newFrame; }
我也更新了我的Github项目,以反映我目前的解决scheme。 编辑3:这并不完美,因为它有真正的自动布局框架的值错误,但它适用于我目前的用途。
编辑4:我已经更新了我的layoutSubviews函数更聪明。 它将调整标签内容的大小,并将标签正确地放置在与文本标签相关的x / y坐标中。
有同样的问题。 我的解决scheme是在返回单元格在-tableView:cellFForRowAtIndexPath
结尾之前调用[cell layoutSubviews]
。 这适用于我,我没有发现有必要重写单元格子类中的layoutSubviews
。
当在故事板中使用segue时,我的cell没有正确更新。 试着
[setNeedsLayout] and [layoutIfNeeded]
在视图和tableview上,它不工作。
[self.tableView reloadData] is in viewDidAppear, as it should.
然后我尝试pixbug的build议,它的工作。 但是不应该直接使用[layoutSubviews]。 所以我尝试了单元格上的文档而不是tableView或视图的build议。
试着
[cell setNeedsLayout]
但是这不起作用。
试着
[cell layoutIfNeeded]
这为我工作。
我把这个之前,返回细胞。
我在iOS 8故事板中遇到了同样的问题(未启用自动布局)。
我有一个表视图与静态表视图单元格的底部。 在IB中,我在表格单元格的内容区域添加了一些空格(样式:“右侧细节”)。 然后在代码(ViewDidLoad)中,我更新了单元格的内容…
self.copyrightsCell.detailTextLabel.text = @"<a string>";
没有IB空间,单元在纵向模式下是INVISIBLE。
但是对于最初的空格,单元格的内容稍后会正确显示。
希望这有助于某人。
我有同样的问题。 我确信数据是可用的,并被分配到cell.detailTextLabel.text我已经注意到,一旦一个值已被分配,那么没有闪烁如果返回到tableView的值更改。 所以在我看来,在detailTextLabel中首次赋值的时候只有一个问题。
所以,我遵循了这个步骤和其他许多。 这个引导我看起来是正确的答案。 我希望这可以帮助其他人,因为iOS 7/8做出了一些改变,所以这让我疯狂。
我的答案是把正常的处理代码在viewWillAppear并添加这个[self.tableview layoutSubviews],而不是[self.tableView重载数据]。 我认为这与苹果在iOS 7/8中的可控性有很大的关系。在回顾一些关于如何使用单元的信息时,我对这个想法有所了解。
再次,我希望这可以帮助别人解决这个烦人的问题。
我认为,如果你需要reloadData,这意味着表格数据创build时不会被加载。
你只需要将你的数据加载到你的tableview所在的viewdidload(或者在table view获取数据之前的其他地方),然后相应地创build这些单元格。
通常,我只是使用任何对象的数组,然后使用[array objectAtIndex:indexpath.row]
,你可能知道。
另外,你最后一段还有一个未完成的句子,看起来很重要。
使用Xcode 6.3.2(6D2105)确认问题OS X Yosemite 10.10.3我确定正确的值正在分配,仍然是第一次不显示,第二次显示。 cell.layoutSubviews()对我来说似乎是合乎逻辑的,因为它看起来好像视图缺less一个刷新,并添加layoutSubviews()的伎俩。
我有一个静态的UITableView类似的问题。 我更改标签的文本,它不会在屏幕上得到更新,除非我单击单元格或做任何事情来强制更新其视图。 我的解决方法是更新文本后调用:
tableView.reloadData()
PS这没有任何意义; 因为这是一个静态表格视图,我不知道为什么它的工作,但它!
- 将约束添加到xib中的“主视图”
- 使用UIStackViewdynamicUITableView行高度?
- iOS 8 AutoLayout滚动视图在iPhone 6 plus上水平滚动
- 在视图控制器的宽度上水平均匀分布UIButton的最简单的方法是什么?
- UISplitViewController – 设置始终可见的主控制器
- 获取UIButton for iPhone 5/6/6 +的可变高度
- Autolayout:UILabel不能用长文本正确resize
- 自动布局具有dynamic高度子视图的UIScrollView
- 如何在animateTransition期间获取ToViewController中子视图的框架:?