相关疑难解决方法(0)

如何在调用-reloadData后保留UITableView contentoffset

CGPoint offset = [_table contentOffset];
[_table reloadData];
[_table setContentOffset:offset animated:NO];    //unuseful

//    __block UITableView *tableBlock = _table;
//    [self performBlock:^(id sender) {
//        [tableBlock setContentOffset:offset];
//    } afterDelay:2];
Run Code Online (Sandbox Code Playgroud)

我知道不知道任何被调用的委托方法reloadData.使用afterDelay:2哪种黑客可能太短或太长,所以我该如何实现呢?

uitableview reloaddata ios contentoffset

57
推荐指数
8
解决办法
5万
查看次数

使用UITableViewAutomaticDimension时,UITableView在begin/endUpdates之后跳转

问题:当我在底部的的UITableView(且仅当在底部)和tableView.beginUpdates()/ tableView.endUpdates()被调用时,UITableView跳了一点点.我不希望它这样做.

设置:我有一个UITableViewUITableViewCells将全部在不同的大小和我使用UITableViewAutomaticDimension大小的细胞.

示例: 当我在底部时UITableView,我选择一个单元格,随后调用tableView.beginUpdates()/ tableView.endUpdates(),UITableView滚动/跳起一点点.

有没有人找到一种方法来做到这一点,所以没有跳跃后呼叫tableView.beginUpdates()/ tableView.endUpdates()在结束时UITableView

暂时我正在UITableViewCells手动计算我的全部,但我宁愿不这样做,因为我想利用它UITableViewAutomaticDimension.

代码:

这里有一些代码来显示tableView.beginUpdates()/ 之间发生的事情tableView.endUpdates():

    tableView.beginUpdates()
    cell!.setNeedsUpdateConstraints()
    cell!.updateConstraintsIfNeeded()
    cell!.setNeedsLayout()
    cell!.layoutIfNeeded()
    tableView.endUpdates()
Run Code Online (Sandbox Code Playgroud)

我的观点会发现:

public override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    self.tableView.estimatedRowHeight = 150.0
    self.tableView.rowHeight = UITableViewAutomaticDimension


    self.tableView.reloadData()
    //Bug in 8.0+ forces us to call three extra …
Run Code Online (Sandbox Code Playgroud)

uitableview ios

24
推荐指数
3
解决办法
5667
查看次数

在iOS 8自动高度的单元格内输入时,UITableView跳转到endUpdates上

我正在使用iOS 8自我调整单元(tableView.rowHeight = UITableViewAutomaticDimensiontableView:estimatedHeightForRowAtIndexPath:)组合.它很有效,直到我开始在单元格内输入内容.当我正在键入时,我正在调用beginUpdates/ endUpdatespair来调整我的单元格大小(文本视图随着我的输入而增长,并且在我删除时缩小)但是每次调用都会导致跳转到表格视图的顶部.如果我删除beginUpdates/ endUpdatespair然后它不会跳转但我的单元格不会在我键入时调整大小.

以下是该问题的演示:

在此输入图像描述

如何在键入而不跳到表格视图的顶部时,如何让我的单元格正确调整大小?我只针对iOS> = 8,所以我不需要任何iOS 7兼容性.

uitableview ios ios8

23
推荐指数
2
解决办法
3219
查看次数

重新加载单元格后向上滚动时,动态单元格高度跳跃的UITableView

我有一个表格视图,每个单元格有可能有自己的高度,因此不适合使用rowHeight.相反,现在我正在使用let indexSet = NSIndexSet(index: 10),而且self.tableView.estimatedRowHeight = 75.这意味着它调用sizeThatFits单元格上的函数,以确定其高度.这一切都运作良好.

问题是当你重新加载屏幕上的单元格时.例如,向下滚动以显示单元格10,然后重新加载单元格10,工作正常.但是当你开始向上滚动,经过你已经看过的单元格时,它会恢复到每个单元格的estimatedRowHeight,完全忽略sizeThatFits,因此在滚动时跳转.我不可能给出一个准确或"足够好"的估计值,因此这种跳跃不会引人注意,因为我的细胞能够显示一行文字或一个完整的图像 - 这是一个很大的区别.尺寸.

我在这里展示了这个效果:

https://vid.me/edgW

我在这方面做了很多不同的尝试,使用了heightForRowAtIndexPath,estimatedHeightForRowAtIndexPath等的混合物.我在StackOverflow上尝试了各种建议.似乎没什么用.

我附上了一个非常简单的示例项目,您可以自己尝试:

https://www.dropbox.com/s/8f1rvkx9k23q6c1/tableviewtest.zip?dl=0

  1. 运行该项目.
  2. 滚动,直到查看单元格10.
  3. 等待最多5秒钟让细胞重新加载(它变成紫色).
  4. 向上滑动.

值得注意的是 - 如果单元格在重新加载时不在视图中,则不会发生这种情况.如果它高于低于当前滚动点,则一切都按预期工作.

objective-c uitableview ios swift

14
推荐指数
3
解决办法
9735
查看次数

Swift ios 9:重新加载数据后的章节标题更改位置

我有简单的UITableView有很多部分和行.部分工作正常.但有时在重新加载表格数据后,部分会改变位置.例如,当我更改标签时发生了这种情况.可能是什么问题呢?

更改标签前的图片:

在更改标签之前

更改标签后的图像:

更改标签后

更新: 添加以下代码:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    self.dishesListTableView.reloadData()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}


func customizeCollectionView() {
    self.collectionView.delegate = self
    self.collectionView.dataSource = self
    self.collectionView.dataProviderDelegate = self.dishesListDataProvider
    self.collectionView.showsHorizontalScrollIndicator = false
    self.collectionView.decelerationRate = UIScrollViewDecelerationRateFast
    self.collectionView.registerClass(HPCollectionViewCell.self, forCellWithReuseIdentifier: HPCollectionViewCellConstants.reuseIdentifier)
}

//MARK: - UITableViewDelegate
func customziseDishesListTableView(){
    self.dishesListTableView.delegate = self
    self.dishesListTableView.dataSource = self

    self.dishesListTableView.registerNib(UINib(nibName: DishesListSingleTableViewCell.nibName, bundle: nil), forCellReuseIdentifier: DishesListSingleTableViewCell.nibName)
    self.dishesListTableView.registerNib(UINib(nibName: DishesListSinglePizzaTableViewCell.nibName, bundle: nil), forCellReuseIdentifier: DishesListSinglePizzaTableViewCell.nibName)

    self.dishesListTableView.estimatedRowHeight = 123
    self.dishesListTableView.rowHeight = UITableViewAutomaticDimension

    if self.dishesListDataProvider.isPizza() {
        self.dishesListTableView.separatorColor = UIColor.clearColor()
    }else{
        self.dishesListTableView.separatorColor = UIColor.expSilverColor() …
Run Code Online (Sandbox Code Playgroud)

uitableview swift ios9

11
推荐指数
2
解决办法
7337
查看次数

调用reloadSections:withRowAnimation后,UITableView会跳转:

我需要展开/折叠的一部分UITableView。我通过调用该节reloadSections:withRowAnimation:0tableView:numberOfRowsInSection:该节返回来实现此目的。

除了一种情况,它工作正常。如果表格视图一直向下滚动并且折叠后内容大小减小,则最终滚动超过最大偏移量。现在,它并没有在动画中滚动,而是在此处捕捉,看起来很丑陋:

在此处输入图片说明

这是我尝试过的:

  1. 包装reloadSections:withRowAnimation:beginUpdates/ endUpdates

    tableView.beginUpdates()
    tableView.reloadSections(indexSet, withRowAnimation: .Automatic)
    tableView.endUpdates()
    
    Run Code Online (Sandbox Code Playgroud)

    那没有帮助。

  2. 包裹reloadSections:withRowAnimation:CATransaction与完成块,计算在其内的滚动距离和滚动表视图动画:

    CATransaction.begin()
    CATransaction.setCompletionBlock {
        // tableView.contentSize is incorrect at this point
        let newContentOffset = ... // calculated value is not correct
        tableView.setContentOffset(newContentOffset, animated: true)
    }
    
    tableView.beginUpdates()
    tableView.reloadSections(indexSet, withRowAnimation: .Automatic)
    tableView.endUpdates()
    CATransaction.commit()
    
    Run Code Online (Sandbox Code Playgroud)

如何确保表格视图不会跳转?

uitableview uikit ios

8
推荐指数
1
解决办法
1285
查看次数

适用于iOS 11的UITableView滚动故障(由reloadData表和mopub放置器引起的内容偏移跳转)

当我升级到iOS 11时,我的应用程序的tableview突然无法顺利滚动.每当我滚动(或reloadData)时,tableview将突然跳转到随机内容偏移位置.

我使用mopub的布局器将广告插入到tableview中,我注意到每当应用程序执行时[tableview reloadData],tableview滚动偏移都会出错并跳转到随机位置.

iphone uitableview uiscrollview ios ios11

7
推荐指数
1
解决办法
5032
查看次数

UIRefreshControl跳转和刷新问题

我有一个UITableViewController内置的UIRefreshControl。我要修复的刷新动画有两个问题。

  1. 当我拖放表格视图时,它开始更新服务器中的数据。如果用户一直拖动它,则会发生明显的偏移跳跃。

  2. 刷新操作结束时,表视图将隐藏动画刷新控件。完成隐藏后,控件将闪烁几帧。

展示柜

该控件是从UIStoryboard设置的。我从那里设置目标并设置颜色。当动作触发时,我的代码刷新了我们服务器中的数据,服务器响应时该服务器具有回调。我从那里停止刷新控件:

dispatch_async(dispatch_get_main_queue(), ^{
   [self.refreshControl endRefreshing];
});
...
[self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

我做错了还是UIRefreshControliOS 11中有故障?

objective-c uirefreshcontrol

5
推荐指数
1
解决办法
801
查看次数

使用自动布局扩展单元格时,UITableView会跳转。

我一直在搜索,找不到针对此问题的解决方案。我当前的代码基于Reload节,而没有重新装入节头

当用户按下单元格时,我正在尝试增加一个uitableview单元格。我有一个带有UILabel的UITableViewCell子类,该子类最初限于两行文本。当用户按下UILabel时,我将UILabel中的numberOfLines属性设置为0,因此它可以根据需要扩展到任意多的行。

这是我来自tableView:didSelectRowAtIndexPath的代码:

if (((NSNumber *)expandedCells[indexPath.section]).boolValue)
{
     labelExpandingCell.cellLabel.numberOfLines = 10;
} else
{
     labelExpandingCell.cellLabel.numberOfLines = 3;
}
[UIView setAnimationsEnabled:NO];
[self.tableView beginUpdates];
[self.tableView setNeedsDisplay];
[self.tableView endUpdates];
[UIView setAnimationsEnabled:YES];
Run Code Online (Sandbox Code Playgroud)

有时,这种方法可以正常工作,通常是在UITableView的contentOffset.y == 0时。通常,当我执行此代码时,tableview会向后跳转100个像素左右。这是运行此代码之前和之后的示例日志。

2016-03-25 14:57:08.549 TableViewTest [485:129926]更新前的内容偏移量:153.500000 2016-03-25 14:57:08.568 TableViewTest [485:129926]更新后的内容偏移量:136.500000

当展开当前可见的单元格时,为什么自动布局会导致表格视图向后跳转?

objective-c uitableview uiscrollview ios contentoffset

4
推荐指数
1
解决办法
1323
查看次数