Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-固定(tableHeaderView)在滚动单元格时使用分组UITableView_Iphone_Objective C_Uiview_Uitableview - Fatal编程技术网

iPhone-固定(tableHeaderView)在滚动单元格时使用分组UITableView

iPhone-固定(tableHeaderView)在滚动单元格时使用分组UITableView,iphone,objective-c,uiview,uitableview,Iphone,Objective C,Uiview,Uitableview,我有一个带有分组的UITableView的UIView,我希望UIView保持为固定的tableHeaderView,而不是在滚动UITableView单元格时移动。因此,滚动时,我希望单元格位于ui视图的后面 这是我当前用于将我的UIView添加到我的UIViewController的代码: 接口h: @interface MyAccountVC : UIViewController <UITableViewDelegate, UITableViewDataSource> {

我有一个带有分组的
UITableView
UIView
,我希望
UIView
保持为固定的
tableHeaderView
,而不是在滚动
UITableView单元格时移动。因此,滚动时,我希望单元格位于
ui视图的后面

这是我当前用于将我的
UIView
添加到我的
UIViewController
的代码:

接口h:

@interface MyAccountVC : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    HeaderView *myHeaderView; // Inherits from UIView
    UITableView *tv;
}

@property (nonatomic, retain) IBOutlet UITableView *tv;
@property (nonatomic, retain) HeaderView myHeaderView;
不确定这是否是将
myHeaderView
添加到
UITableView
的最佳方式,但它似乎工作正常,我可以使用
UITableView
将上述代码添加到任何
UIViewController
中,以便在需要时重复使用标题


当我滚动时,页眉会随着单元格一起移动,但我希望页眉固定在顶部
UINavigationBar
的正下方,同时单元格会在页眉后面自由移动。请让我知道这一切是否有意义,或者您是否需要更多的代码来确定我试图实现的目标。

您可以将视图放在UITableView的正上方,而不是将其作为headerview放在内部

正在详细阐述帕拉马西万的答案

我不使用nib文件创建视图,因此我将描述假设您以编程方式创建视图的代码

您需要做的是,只需将标题视图放在顶部,并在顶部下方放置一个大小合适的tableview

例如:

- (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
}
[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];
这样,您就拥有了一个始终位于视图顶部的UIView,并且不会与tableview一起滚动

如果将myHeaderView添加为tableview headerView,它将始终与我认为的tableview一起滚动

在您的示例中,使用nib,您可能可以在“viewDidLoad”函数中调整帧的大小,以便UITableView从位置(0,myHeaderView.frame.size.height)开始


EDIT*最终了解了如何使用4个空格进行代码格式化:)

您可以创建一个自定义的
UIViewController
并自己实现
UITableViewDelegate
UITableViewDataSource
协议

UITableView
添加到
UIViewController
中,然后只需调用
-addSubview:(UIView*)view
方法,即可将自定义
UIView
添加到
UITableView
的顶部。设置UITableView内容和滚动插入属性

例如:

- (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
}
[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];
您还可以在
UIView
下方使用一个
UIImageView
,该视图位于UITableView的顶部,图像一开始是透明的,然后淡入到
UIView
的颜色中。这将显示单元格位于
UIView
后面


这在代码中比在Interface Builder中更容易实现。根据我的经验,在其他视图之上添加UIView对象会使Interface Builder感到困惑,尤其是当它是UITableView时。由于某些原因,它也大大降低了界面生成器的速度。

是的,在UITableView的正上方有一个UIView。以编程方式说[self.view addSubview:viewHeader];[self.view addSubview tableview列表];如果我这样做,UIView将覆盖前两个单元格。然后设置表的contentInset。;)我也在.xib上做过。我在顶部附近放置了一个UIView,然后添加了一个UITableView来填充它下面的空间。如果您允许旋转,只需小心地按您想要的方式设置AutoResizingMask。