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
并将您的UIView
和UITableView
作为子视图添加到它,那么它对我有用。这实际上是一个很好的效果。可能会自己使用它: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 可以滚动过去最后一个单元格并在 iOS 中显示更多元素
UITableView indexPathsForVisibleRows 返回错误的行