如何使用节头标题在UITableViewController中调整UITableView的大小

时间:2012-11-12 20:03:18

标签: iphone objective-c ipad cocoa-touch

我在UITableViewController中有一个分组的UITableView,我想要水平调整它。

我尝试了许多不同的方法,但没有一种是完美的。

我尝试了什么:

1。)覆盖- [UITableView setFrame:],但它没有移动部分的标题,并且两边都有黑色区域(因为表格视图后面没有任何内容)。

2.。)覆盖- [UITableViewCell setFrame:],但它仍然不会移动标题(这很重要)。

3.。)从UITableViewController调用- [self.view setFrame:],但它什么也没做。

如果你有任何想法如何解决,请与我分享!

5 个答案:

答案 0 :(得分:36)

如果您从- [UITableView setFrame:]致电- [UITableViewController viewDidAppear:],则可以:

- (void)viewDidAppear:(BOOL)animated
{
    [self.tableView setFrame:CGRectMake(x, y, w, h)];
}

为了避免在表格视图的每一边都有黑条,请将应用程序主窗口的背景颜色设置为白色:

[[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor whiteColor]];

答案 1 :(得分:14)

主要问题是UITableViewController的表格视图是主视图,因此不需要调整大小。

最佳选择是不使用UITableViewController。相反,使用UIViewController并添加您自己的UITableView作为视图控制器主视图的子视图。这样你就可以根据需要调整大小。

当然还有额外的工作来连接所有的管道,所以你的视图控制器就像一个表视图控制器,但没有太多的事情要做。

答案 2 :(得分:2)

要修复正在调整大小的标题,我会尝试:

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    CGFloat headerHeight = 40;
    UIView *headerView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, headerHeight)];
    UILabel *cellLabel = [[UILabel alloc] initWithFrame: headerView.frame];
    [cellLabel setText: @"My Text"];
    [cellLabel setBackgroundColor: [UIColor clearColor]];
    [headerView addSubview: cellLabel];
    return headerView;
}

    - (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 40;
}

此代码应替换此方法:

- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

答案 3 :(得分:2)

我知道这是一个老问题,但我认为在这种情况下最好使用嵌入在Container视图中的UITableViewController而不是调整UITableViewController的tableView。

答案 4 :(得分:0)

参加聚会的时间已晚,但对于搜索该主题的其他人来说总是很方便......

我不认为在viewDid中显示这样做是正确的方法,因为它肯定会对用户可见并在他们眼前调整大小。并不能提供出色的用户体验。

在swift 4中,我使用类似

的内容
override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    var rect = tableView.frame
    if rect.size.height != h && rect.size.width != w { 
        // set x and y to any value you need. you can also have a 
        // condition about the origin (x,y) 
        // if you have a gap on the left or top...
        rect.size.height = h;
        rect.size.width = w;
        tableView.frame = rect
    }
}

这将在tableView可见之前进行更改并使用户体验更好,并且如接受的答案中所述,您需要设置窗口颜色,使表格视图的颜色更好地融合(白色是默认值)

    UIApplication.shared.keyWindow?.backgroundColor = .white