ios UITableView/UIScrollView如何自动知道ContentSize何时更改?

qqrboqgw  于 2023-06-07  发布在  iOS
关注(0)|答案(3)|浏览(171)

是否有一种自动的方法来了解UITableView/UIScrollView中的ContentSize更改?

dohp0rv5

dohp0rv51#

答案其实很简单,使用KVO(Key Value Observing);

- (id)initWithFrame:(CGRect)frame tableView:(UITableView *)tableView
{
    // ....
    [self.tableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior context:NULL];
    // ....
}

- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{
    if ([keyPath isEqualToString:@"contentSize"]) 
    {
        // Do something
    }
}

但我还不确定国旗。

qeeaahzv

qeeaahzv2#

不喜欢KVO的人:

- (void)setContentSize:(CGSize)contentSize {
    [super setContentSize:contentSize];
    // Do something.
}

是的,只需要使用super来访问父方法。这里假设您子类化了UIScrollview/TableView/CollectionView

kkih6yb8

kkih6yb83#

这可以通过使用合并以更优雅的方式完成:

scrollview.publisher(for: \.contentSize)
                .removeDuplicates()
                .sink { size in  /* Do your stuff */ }
                .store(in: &cancellables)

相关问题