3

我有一个UITableView带有两个部分和动态行数的普通表视图。我还UIView为节标题返回了一个。

除非重新加载表,否则一切正常。节标题位置移动到随机位置,直到视图开始滚动。

标题视图和超级视图中的自动布局似乎没有违反。我已经设置了表格页脚视图nil或显示分页动画。表格视图位于滚动视图中。

为什么节标题会出现此故障的任何建议或解决方案。而且这个故障只发生在 iOS 9

4

2 回答 2

5

对我来说,问题与刷新控制无关,尽管它是我的视图控制器的一部分。它与estimatedRowHeight和相关rowHeight

我找到了一个经验性的解决方案。在视图控制器和重新加载的 tableview 之间来回切换时发生了我的问题。

因为我的细胞高度可变,所以我有:

self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 44.0f;

所以我可以处理单元格自动调整大小。显然问题出在estimatedRowHeight. 当我用最大单元格行高度更改值时,故障消失了。桌子部分不再跳跃。我使用视图检查器根据我最糟糕的用例计算行高。

注意#1

我不知道它对一千个细胞的表现如何。estimatedRowHeight应该用于计算整个内容偏移量,因此考虑最坏的情况可能效率低下。

笔记2

在计算最大单元格高度时,请记住考虑字体大小可以通过系统首选项增加的情况,如果单元格已注册到这些更改。

于 2016-12-01T08:59:43.520 回答
1

我的问题得到解决如下。

最初我添加了刷新控制器作为表视图的子视图。

_chatListRefreshControl = [[UIRefreshControl alloc] init];
_chatListRefreshControl.transform = CGAffineTransformMakeScale(0.7, 0.7);
[_chatListRefreshControl addTarget:self
                            action:@selector(refreshChatListView:)
                  forControlEvents:UIControlEventValueChanged];
[self.myChatsTableView addSubview:_chatListRefreshControl];

我已将其修改如下:将刷新指示器从表视图更改为表视图控制器的属性。

UITableViewController *chatTableViewcontroller = [[UITableViewController alloc] init];
    chatTableViewcontroller.tableView = self.myChatsTableView;
    _chatListRefreshControl = [[UIRefreshControl alloc] init];
    _chatListRefreshControl.transform = CGAffineTransformMakeScale(REFRESH_INDICATOR_SCALE_FACTOR, REFRESH_INDICATOR_SCALE_FACTOR);
    [_chatListRefreshControl addTarget:self action:@selector(refreshChatListView:) forControlEvents:UIControlEventValueChanged];
    chatTableViewcontroller.refreshControl = _chatListRefreshControl;
    [self addChildViewController:chatTableViewcontroller];
于 2016-11-29T12:49:02.370 回答