为什么tableView 的cell 刚进去的时候里面的内容显示不正确,但是点击一下就显示正常?

为什么tableView 的cell 刚进去的时候里面的内容显示不正确,但是点击一下又显示正常?

我是子类化了一个tableView,然后用xib封装了一个tableViewcell,tableView 里面有里面要显示的控件,但是控件的位置、大小是在tableViewCell 的 setLayoutSubviews 中根据model 设置的。结果是没点击时,显示的位置是xib 里面的位置,然后点击之后是我在layoutSubviews 中设置的位置

阅读 6.1k
5 个回答
我是子类化了一个tableView,然后用xib封装了一个tableViewcell,tableView 里面有里面要显示的控件,但是控件的位置、大小是在tableViewCell 的 setLayoutSubviews 中根据model 设置的。结果是没点击时,显示的位置是xib 里面的位置,然后点击之后是我在layoutSubviews 中设置的位置
  1. tableViewcell封装或者不封装,高度都是由tableView决定的,在你没有实现- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath回调的情况下,tableView的RowHeight是固定的44,你使用的xib,所以最先加载好以后是xib里面的高度。

  2. 问题中说的布局问题,要确认setLayoutSubviews这个方法是否在model传递之后调用,题主可能使用的是layoutSubviews方法,或者setNeedsLayout?并不清楚,不过根据描述,点击后layoutSubviews方法是要调用的,这个时候model肯定已经绑定过了,所以位置就正确了。(仅猜测)

暂且认为你说的是『tableViewCell 里面有里面要显示的控件』吧。

是不是勾上 AutoLayout 了…… 如果勾上了,layoutSubviews不一定会调用。打个log看看调用了没有。

重写 layoutSubviews 的时候调用 super 了嘛?

最好还是上代码吧

可能是frame设置的问题,你检查一下xib里cell的frameheightforrow

那就是点击之前你没有layoutSubviews,点击之后你调用了layoutSubviews函数了。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题