首页 > 解决方案 > 滚动时 setNeedsStatusBarAppearanceUpdate() 似乎卡在了我的应用程序的主队列中

问题描述

在 Xcode 11 和 iOS 13 中。当用户在我的应用程序中滚动表格视图或滚动视图时,我必须更改状态栏样式。

当我将视图滚动到某个阈值时,我调用 setNeedsStatusBarAppearanceUpdate:,但它似乎卡住了我的应用程序,并且 cpu 使用率飙升至 70%~90%。

//这是一个简单的UITableviewController,单元格只改变了背景颜色

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.y  > 400 && self.lastOffsetY < 400) {
        [self setNeedsStatusBarAppearanceUpdate];
    }else if (scrollView.contentOffset.y < 400 && self.lastOffsetY > 400) {
        [self setNeedsStatusBarAppearanceUpdate];
    }
    self.lastOffsetY = scrollView.contentOffset.y;
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    if (self.tableView.contentOffset.y > 400) {
        return UIStatusBarStyleDarkContent;
    }else {
        return UIStatusBarStyleLightContent;
    }
}

在此处输入图像描述 有什么办法可以顺利实现需求?

标签: iosobjective-c

解决方案


改为使用

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                     withVelocity:(CGPoint)velocity 
              targetContentOffset:(inout CGPoint *)targetContentOffset;

scrollViewDidScroll每次 contentOffset 更改都会永久调用。


推荐阅读