9

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

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

我试过的:

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

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

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

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

4

5 回答 5

37

如果你- [UITableView setFrame:]从调用- [UITableViewController viewDidAppear:],它的工作原理:

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

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

[[[UIApplication sharedApplication] keyWindow] setBackgroundColor:[UIColor whiteColor]];
于 2012-11-12T21:32:55.157 回答
14

主要问题是 a 的表视图UITableViewController是主视图,因此它不应该调整大小。

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

当然,连接所有管道需要额外的工作,因此您的视图控制器可以像表格视图控制器一样工作,但没有太多工作要做。

于 2012-11-12T20:19:23.667 回答
2

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

于 2015-02-12T18:09:03.390 回答
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
于 2012-11-12T21:23:00.470 回答
0

派对迟到了,但对于其他搜索该主题的人来说,它总是很方便......

我不认为在 viewDid 出现时这样做是正确的方法,因为它肯定对用户可见并在他们眼前调整大小。不会带来出色的用户体验 imo。

在 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
于 2018-03-12T15:21:33.350 回答