ios - 滚动时 setNeedsStatusBarAppearanceUpdate() 似乎卡在了我的应用程序的主队列中

标签 ios objective-c

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

当我将 View 滚动到某个阈值时,我调用 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;
    }
}

enter image description here 有什么办法可以顺利实现需求吗?

最佳答案

使用代替

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                     withVelocity:(CGPoint)velocity 
              targetContentOffset:(inout CGPoint *)targetContentOffset;
每次 contentOffset 更改都会永久调用

scrollViewDidScroll

关于ios - 滚动时 setNeedsStatusBarAppearanceUpdate() 似乎卡在了我的应用程序的主队列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58319399/

相关文章:

android - 无法弄清楚是什么导致了 IE、Android 和 IOS 中的显示错误

ios - NSString 比较不适用于 iPAD

ios - UICollectionView 仅在一个方向上显示动态大小的单元格

objective-c - 属性访问、风格还是实质内容?

iphone - 方向导航栏问题

ios - 无法使用 [AnyObject] 类型的参数列表调用“'setViewController'”

ios - 核心数据创建 TableViewCells Swift

objective-c - 拖动调整 NSView(或其他对象)的大小

iphone - 简单直接的 MP3 文件 FFT

ios - 通过闭包传递 UIPickerView 行索引