我想在加载完成后更改表的偏移量,并且该偏移量取决于表上加载的单元格数.
是否可以通过SDK知道uitableview加载何时完成?我在委托和数据源协议上都没有看到任何内容.
我不能使用数据源的计数,因为只加载可见单元格.
有没有办法找出什么时候UITableView从数据源请求数据?
相关视图控制器()的viewDidLoad/ viewWillAppear/ viewDidAppear方法UITableViewController都没有在这里使用,因为它们都过早发生.它们(完全可以理解)都不保证对数据源的查询暂时完成(例如,直到滚动视图).
一个解决办法,我发现是调用reloadData的viewDidAppear,因为当reloadData返回时,表视图是保证完成尽可能多的,因为它需要暂时查询的数据源.
但是,这看起来相当令人讨厌,因为我认为这是因为reloadData它首次加载时会导致数据源被要求提供相同的信息两次(一次是自动的,一次是因为调用).
我想要这样做的原因是我想要保留 - 的滚动位置UITableView- 但是直到像素级别,而不仅仅是最近的行.
当恢复滚动位置(使用scrollRectToVisible:animated:)时,我需要表视图中已经有足够的数据,否则scrollRectToVisible:animated:方法调用什么都不做(如果您将调用单独放在任何一个中viewDidLoad,则会发生这种情况,viewWillAppear或者viewDidAppear).
每当完全加载UICollectionView时,我必须做一些操作,即那时应该调用所有UICollectionView的数据源/布局方法.我怎么知道?是否有任何委托方法来了解UICollectionView加载状态?
我想知道CALayer中动画的回调位置(或者有什么内容).具体来说,对于隐含的动画,如改变框架,位置等.在UIView中,你可以这样做:
[UIView beginAnimations:@"SlideOut" context:nil];
[UIView setAnimationDuration:.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animateOut:finished:context:)];
CGRect frame = self.frame;
frame.origin.y = 480;
self.frame = frame;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
具体来说,这setAnimationDidStopSelector就是我想要的CALayer中的动画.有什么相似的吗?
TIA.
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哪种黑客可能太短或太长,所以我该如何实现呢?
像这样的代码
collectionLayout.estimatedItemSize = CGSize(width: 50, height: 25)
collectionLayout.itemSize = UICollectionViewFlowLayoutAutomaticSize
collectionLayout.minimumInteritemSpacing = 10
for _ in 0 ..< 1000 {
let length = Int(arc4random() % 8)
let string = randomKeyByBitLength(length)
array.append(string!)
}
collectionView.reloadData()
Run Code Online (Sandbox Code Playgroud)
细胞限制:
当我在iOS 12上运行它时,它是不同的.左模拟器是iOS 11,右边是iOS 12:
但是,当我滚动它时,细胞的帧将是正常的.
当我从下面调用以下内容时,当我重新加载表数据时,我试图让UITableview转到页面顶部
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
// A bunch of code …
[TableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
同样,我还希望能够在重新加载表数据时转到特定的部分.
我尝试放置以下内容,这似乎只适用于重新加载之前和之后的行,但没有任何反应:
[TableView scrollToRowAtIndexPath:0 atScrollPosition:UITableViewScrollPositionTop animated:YES];
Run Code Online (Sandbox Code Playgroud) 当您调用-reloadData表视图实例时,它是否会使所有UITableViewDataSource调用异步?谢谢.
我在这个表格视图中有一个数字列表.

如您所见,数字会重复出现.让我们将一组重复的数字视为一组.所以有1组,2组等等.
我想要做的是当应用程序启动时,我需要自动滚动到指定组的开始位置.在进一步解释之前,这是我的代码到目前为止.
import UIKit
class TableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
private var scrollToTime = true
private var items = [Int]()
private var groupNoToScroll = 12
override func viewDidLoad() {
super.viewDidLoad()
items = [1, 1, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, 18, …Run Code Online (Sandbox Code Playgroud) 我如何知道UICollectionView已完全加载?我试图在Swift中重现这个解决方案,但是我在阅读Obj-C时遇到了麻烦.有人可以帮忙吗?
ios ×6
uitableview ×5
iphone ×4
cocoa-touch ×2
swift ×2
autoscroll ×1
delegates ×1
ios12 ×1
reload ×1
reloaddata ×1
scroll ×1
tableview ×1
xcode10 ×1