加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于UINavigationController与UITableView聚合的发现

发布时间:2020-12-13 22:13:41 所属栏目:百科 来源:网络整理
导读:今天写iOS项目时,发现了几个问题,于是停下项目,好好地进行了一番研究(已发现文中问题的亲们可跳过,哈哈): 当我们的视图(控制器的视图)中有 导航条 ,即 导航控制器 自动为我们添加的导航条时。 通过导航控制器来控制视图: self .window .rootViewContr

今天写iOS项目时,发现了几个问题,于是停下项目,好好地进行了一番研究(已发现文中问题的亲们可跳过,哈哈):

当我们的视图(控制器的视图)中有导航条,即导航控制器自动为我们添加的导航条时。

通过导航控制器来控制视图:

self.window.rootViewController=[[UINavigationController alloc] initWithRootViewController:[[ViewController alloc] init]];

我们在控制器的视图中添加子视图时,子视图显示内容的y坐标是相对于视图的最顶端来说的。如图:

添加视图的代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    CGFloat width=self.view.frame.size.width;
    self.view.backgroundColor=[UIColor whiteColor];

    UIView* view1=[[UIView alloc] init];
    view1.frame=CGRectMake(0,0,width,64);
    [self.view addSubview:view1];
    view1.backgroundColor=[UIColor redColor];

    UIView* view2=[[UIView alloc] init];
    view2.frame=CGRectMake(0,64,64);
    [self.view addSubview:view2];
    view2.backgroundColor=[UIColor yellowColor];
}

上面的显示是显而易见的。

但是当我们添加UITableView时问题就来了。

在视图中手动添加UITableView

在添加UITableView之前,如果在控制器的视图中添加了另外一个子视图的话,那么UITableView的显示内容(包括tableHeaderView、tableFooterView和UITableViewCell)是以控制器的顶端为y的坐标起点的。

- (void)viewDidLoad {
    [super viewDidLoad];
    CGFloat width=self.view.frame.size.width;
    CGFloat height=self.view.frame.size.height;

    self.view.backgroundColor=[UIColor whiteColor];

    UIView* view1=[[UIView alloc] init];
    view1.frame=CGRectMake(0,100);
    [self.view addSubview:view1];
    view1.backgroundColor=[UIColor greenColor];


    self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,height) style:UITableViewStylePlain];
    self.tableView.dataSource=self;
    [self.view addSubview:self.tableView];
    self.tableView.backgroundColor=[UIColor redColor];


}

显示效果如图:

但是,如果在添加UITableView之前并没有在控制器的视图中添加别的子视图,则UITableView的显示内容是以导航栏的底部为y的坐标起点的。

- (void)viewDidLoad {
    [super viewDidLoad];
    CGFloat width=self.view.frame.size.width;
    CGFloat height=self.view.frame.size.height;

    self.view.backgroundColor=[UIColor whiteColor];



    self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,height) style:UITableViewStylePlain];
    self.tableView.dataSource=self;
    [self.view addSubview:self.tableView];
    self.tableView.backgroundColor=[UIColor redColor];

    UIView* view1=[[UIView alloc] init];
    view1.frame=CGRectMake(0,100);
    [self.view addSubview:view1];
    view1.backgroundColor=[UIColor greenColor];


}

注意:不管怎么设置,只是UITableView的显示内容的y坐标发生了改变,UITableView自身还是如平常那样。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读