向下滚动 uitableview 时,UIView 无法正确显示

Posted

技术标签:

【中文标题】向下滚动 uitableview 时,UIView 无法正确显示【英文标题】:UIView does not show properly when the uitableview is scrolled down 【发布时间】:2014-05-16 02:10:55 【问题描述】:

我正在实现某种加载屏幕,其中包含一个黑色 uiview,其中心有一个微调器。

当tableview被向下滚动加载时,加载屏幕在顶部,如果tableview已经滚动到底部,加载屏幕消失。

功能

UIView *blackScreen = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
blackScreen.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
blackScreen.tag = LOADING_SCREEN_TAG;

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

spinner.center = CGPointMake(CGRectGetWidth(self.view.bounds)/2,
                             CGRectGetHeight(self.view.bounds)/2.3);

spinner.tag = SPINNER_TAG;

[spinner startAnimating];

[self.view addSubview:blackScreen];
[self.view addSubview:spinner];

[self.view setUserInteractionEnabled:NO];

【问题讨论】:

【参考方案1】:

你需要加contentOffset,我想给你介绍这个page,它解释了它的使用。

无论如何,这里是解决方案,这是假设你的tableview的变量名是tableView并且被设置为类的属性:

CGRect loadingScreenFrame = CGRectMake([[UIScreen mainScreen] bounds].origin.x + self.tableView.contentOffset.x,
                                       [[UIScreen mainScreen] bounds].origin.y + self.tableView.contentOffset.y,
                                       [[UIScreen mainScreen] bounds].size.width,
                                       [[UIScreen mainScreen] bounds].size.height);

UIView *blackScreen = [[UIView alloc] initWithFrame:loadingScreenFrame];
blackScreen.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
blackScreen.tag = LOADING_SCREEN_TAG;

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];

spinner.center = CGPointMake((CGRectGetWidth(self.view.bounds)/2) + self.tableView.contentOffset.x,
                             (CGRectGetHeight(self.view.bounds)/2.3) + self.tableView.contentOffset.y);

spinner.tag = SPINNER_TAG;

[spinner startAnimating];

[self.view addSubview:blackScreen];
[self.view addSubview:spinner];

[self.view setUserInteractionEnabled:NO];

【讨论】:

如果回答了您的问题,请点击我的回答旁边的勾选按钮,以供以后访问者参考【参考方案2】:

一个解决方案是不将旋转视图添加到 tableview,而是添加到它的 superview。看起来您可能正在使用 UITableViewController,这意味着您需要重组代码以使用 UIViewController 来完成这项工作。将 UITableView 和微调器视图都添加到 UIViewController 的视图中也可以实现您正在寻找的内容,而无需根据内容偏移设置中心。

【讨论】:

以上是关于向下滚动 uitableview 时,UIView 无法正确显示的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableView 中滚动时移除 UIView

UITableView 不在 UIView 容器内滚动

UIView、UICollectionView、UITableView、UIScrollView 的边界属性理解混乱

iPhone通过滑出表格视图来滚动UITableview

滚动以在 UIView 中加载内容

类似于 UIRefreshControl 将隐藏的 UIView 添加到 UITableView