我有UIView
分组UITableView
,我希望UIView
保持固定tableHeaderView
,而不是在滚动{{1}时移动}}的。因此,滚动时我希望单元格位于UITableViewCell
后面。
这是我目前用于将UIView
添加到UIView
的代码:
Interface.h:
UIViewController
Implementation.m(在viewDidLoad中):
@interface MyAccountVC : UIViewController <UITableViewDelegate, UITableViewDataSource> {
HeaderView *myHeaderView; // Inherits from UIView
UITableView *tv;
}
@property (nonatomic, retain) IBOutlet UITableView *tv;
@property (nonatomic, retain) HeaderView myHeaderView;
不确定这是否是将// Set up the table's header view based on our UIView 'HeaderView' outlet.
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:nil options:nil];
for (id currentObject in topLevelObjects) {
if ([currentObject isKindOfClass:[UIView class]]) {
self.myHeaderView = (HeaderView *)currentObject;
break;
}
}
CGRect newFrame = CGRectMake(0.0, 0.0, self.tv.bounds.size.width, self.myHeaderView.frame.size.height);
self.myHeaderView.frame = newFrame;
self.tv.tableHeaderView = self.myHeaderView;
添加到myHeaderView
的最佳方式,但它似乎工作正常,我可以简单地将上述代码添加到任何UITableView
如果需要,UIViewController
可以重新使用标题。
当我滚动时,标题随着单元格一起移动,但我希望标题在顶部UITableView
正下方固定,同时单元格自由移动并在标题后面移动。如果这一切都有意义,或者您是否需要更多代码以确定我想要实现的目标,请告诉我。
答案 0 :(得分:7)
详细说明Paramasivan的答案。
我不使用nib文件创建视图,因此我将以编程方式创建视图来描述代码。
您需要做的是,只需将标题视图放在顶部,然后将大小的桌面视图放在顶部。
示例:
- (void) loadView {
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
self.view = view;
self.myHeaderView = ... // use your init function, with rect something like (0,0,320,50)
[view addsubview:self.myHeaderView];
self.tv = [[UITableView alloc] init... // with frame like (0,50,320,430)
[view addSubview:self.tv];
// release everything
}
这样,你有一个始终位于视图顶部的UIView,并且不会使用tableview滚动。
如果你将myHeaderView添加为tableview headerView,我会一直使用tableview滚动。
在您的示例中,使用nib,您可以在“viewDidLoad”函数中调整框架的大小,以便UITableView从位置(0,myHeaderView.frame.size.height)开始。
EDIT *终于找到了如何使用4个空格进行代码格式化:)
答案 1 :(得分:2)
您可以创建自定义UIViewController
并自行实施UITableViewDelegate
和UITableViewDataSource
协议。
将UITableView
添加到UIViewController
,然后只需调用UIView
方法,即可在UITableView
之上添加自定义-addSubview:(UIView *)view
。设置UITableView内容并滚动插入属性。
示例:
[tableView setContentInset:UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f)];
[tableView setContentOffset:CGPointMake(0.0f, 44.0f)];
[[self view] addSubview:tableView];
UIView *viewAboveTableView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)];
[[self view] addSubview:viewAboveTableView];
您还可以使用位于UITableView顶部的UIImageView
下方的UIView
,并使图像以透明方式开始并淡入UIView
的颜色。这样可以看出细胞正在UIView
后面。
这在代码中比在Interface Builder中更容易完成。根据我的经验,在其他视图之上添加UIView对象会使Interface Builder特别困惑,特别是如果它是UITableView。由于某种原因,它也会大大降低Interface Builder的速度。
答案 2 :(得分:0)
您可以将视图放在UITableView上方,而不是将其作为标题视图放在里面。