UITableView 顶部的透明视图

Posted

技术标签:

【中文标题】UITableView 顶部的透明视图【英文标题】:Transparent View at the Top of a UITableView 【发布时间】:2011-04-22 07:27:17 【问题描述】:

当您在 iPhone 上打开“邮件”并点按“编辑”,选择一封电子邮件并点按“移动”时,UITableView 会出现,其中包含您可以放入邮件的所有文件夹。顶部是一个透明视图,显示您选择的电子邮件.当您向下移动手指时,视图保持在原位,当您向上移动手指时,单元格通过透明视图可见。

苹果是如何配置这个视图的?我想了两种方法,但都不起作用:

视图作为UITableView标题视图返回。不起作用,因为即使向下移动表格视图,视图也会保持在顶部。

视图在顶部是静态的,表格视图的框架从透明视图的底部开始。这不起作用,因为当表格视图向上移动时,它通过透明视图可见。

关于如何重现这种效果的任何想法?

【问题讨论】:

【参考方案1】:

您需要创建透明视图,然后将其作为子视图添加到视图控制器,使其成为UITableView 的兄弟。您可以在 viewDidLoad() 方法中执行此操作。

- (void)viewDidLoad

    int viewHeight = 50;

    // Assume myTableView is a UITableView variable
    myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - 44) style:UITableViewStylePlain];
    myTableView.scrollIndicatorInsets = UIEdgeInsetsMake(viewHeight, 0, 0, 0);
    myTableView.contentInset = UIEdgeInsetsMake(viewHeight, 0, 0, 0);

    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,viewHeight)]; 

    // Configure your view here.
    myView.backgroundColor = [UIColor colorWithRed:0.0 green:0.7 blue:0.8 alpha:0.75];

    [self.view addSubview:myTableView];
    [self.view addSubview:myView];
    [myView release];


您也可以使用 XIB 设置您的视图,但我将把它作为练习留给您。

编辑:改用contentInset 属性删除了对UITableView 委托方法和自定义标题视图的要求。

注意:请参阅下面的其他 cmets。

【讨论】:

我刚刚在我自己的一个应用程序中对此进行了测试,看起来您无法在 UITableViewController 中使用它。我可以通过使用 UIViewController 并添加 2 个子视图、UITableView,然后是透明的 UIView 来使其工作。 实际上可以添加它,如果将self.view 替换为self.someTableView,但视图将在表格视图中保持静态并随其移动。 正确。这正是我发现的行为。我以为你希望它固定在顶部。 我希望它固定在视图控制器的顶部,这样它就不会滚动。您可以在 ios 设备上打开 Mail 应用程序并查看它的运行情况:) 好的。如果您遵循我的第一条评论,即使用UIViewController 并将您的UIViewUITableView 作为子视图添加到它,那么它对我有用。这实际上是一个很好的效果。可能会自己使用它:D【参考方案2】:

对于 XIB 方法:

创建一个新的 UIViewController(使用 XIB) 将您的 UITableView 和 UIView 添加到其中。

使它们成为默认 UIView(称为 View)的两个子视图,并确保它们以正确的顺序添加。 UITableView 应该是列表中的第一个,您的视图应该是第二个(因此您的视图位于 UITableView 的顶部)。

在 .m 文件中实现 UITableViewDataSource 和 UITableViewDelegate 的最小值:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

在 Interface Builder 中选择 UITableView 列表并转到“连接检查器”。将 dataSource 和委托给“文件所有者”。

保存并运行。你现在应该完成了。

【讨论】:

以上是关于UITableView 顶部的透明视图的主要内容,如果未能解决你的问题,请参考以下文章

重新加载时阻止透明 UITableView 部分标题闪烁

如何实现(几乎)全视图 uitableview 可以滚动过去最后一个单元格并在 iOS 中显示更多元素

下拉 UItableView 切换视图控制器

UITableView indexPathsForVisibleRows 返回错误的行

iPhone:如何制作透明的 XIB,从中我们可以看到以前视图的 uitableview

如何在 UITableView 顶部添加一个一起滚动的视图,但在滚动后粘在顶部