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

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

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

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

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

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

【问题讨论】:

    标签: iphone ios uitableview uiview


    【解决方案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 和委托给“文件所有者”。

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

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多