代码之家  ›  专栏  ›  技术社区  ›  Banjer

子视图显示在TableView后面

  •  1
  • Banjer  · 技术社区  · 14 年前

    当我向UITableViewController添加子视图时,它似乎位于TableView的下面。我可能加载子视图不正确,或者调用 addSubview 在错误的地方。我所指的子视图是选项卡上方的红色区域,其中还包含“单击我”按钮:

    screen shot http://i43.tinypic.com/30275gg.jpg

    你可以看到细胞系有点重叠。下面是我在TableViewController中添加子视图的位置:

    - (void)viewDidLoad {
        [super viewDidLoad];
        CGRect hRect = CGRectMake(0, 170, 320, 480);
        HomeScreenOverlayView *homeView = [[HomeScreenOverlayView alloc] initWithFrame:hRect];
        [self.tableView addSubview:homeView];
        [homeView release];
    }
    

    有什么想法吗?谢谢!

    3 回复  |  直到 14 年前
        1
  •  2
  •   drawnonward    14 年前

    调用addSubview时,它可能是第一个添加到表视图的视图。稍后,所有单元格和支持视图都将添加到视图上。

    最好的做法是创建一个空视图,并向其中添加表视图和覆盖视图,确保覆盖视图位于表视图上方。

    视图服务于绘图、交互和布局的3个角色。只有一个视图可以胜任其中一个角色。

        2
  •  4
  •   dianovich    14 年前

    我自己也遇到了这个问题,解决方法是不向表中添加视图,而是将视图添加到表的超级视图中。

    UIView *viewToAdd = [[UIView alloc] initWithFrame: self.view.frame];
    [self.view.superview addSubview: viewToAdd];
    

    当您想要屏蔽整个表(例如加载屏幕)时,这一点特别有用。

    注意:我通常会把这个添加到视图中:在视图的生命周期中。

        3
  •  0
  •   shosti    14 年前

    你可以使用 - (void)sendSubviewToBack:(UIView *)view - (void)insertSubview:(UIView *)view atIndex:(NSInteger)index . addSubview 始终将新视图置于前面。
    编辑: 抱歉,误读了问题,看起来您希望子视图在前面。