UITableView顶部的透明视图

时间:2011-04-22 07:27:17

标签: iphone ios uitableview uiview

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

apple如何配置此视图?我想到了两种方法,但它们都不起作用:

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

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

有关如何重新创建此效果的任何想法?

2 个答案:

答案 0 :(得分:2)

您需要创建透明视图,然后将其作为子视图添加到视图控制器中,以便它是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设置您的视图,但我会将其作为练习留给您。

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

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

答案 1 :(得分:-1)

对于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列表并转到“Connection Inspector”。拖动dataSource并委托给'File Owner'。

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