ios - 滚动时 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;
}
}
解决方案
改为使用
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset;
scrollViewDidScroll
每次 contentOffset 更改都会永久调用。
推荐阅读
- postgresql - PostgreSQL:如何更改 log_min_duration_statement 以使更改生效?
- java - 只有阿拉伯语文本改变大小,而不是字符串上的其他文本
- mysql - 我是否应该使用另一列来显示 LONGTEXT 是否包含数据?
- python - sqlalchemy.exc.InvalidRequestError:需要 SQL 表达式、列或映射实体 - 得到 '
' - lotus-notes - LotusScript - 按主题查找文档
- html - 样式表未正确使用 html 文件,但它适用于其他 html 文件
- azure - Azure 服务总线主题重复检测
- c# - C#:如果我只有它的名称,如何使用按钮(fe,甚至其他对象)?
- azure-active-directory - Webview2 SPA SSO
- corda - Corda 节点连接到 Oracle 数据库时无法启动