我在UITableViewController中有一个分组的UITableView,我想要水平调整它。
我尝试了许多不同的方法,但没有一种是完美的。
我尝试了什么:
1。)覆盖- [UITableView setFrame:]
,但它没有移动部分的标题,并且两边都有黑色区域(因为表格视图后面没有任何内容)。
2.。)覆盖- [UITableViewCell setFrame:]
,但它仍然不会移动标题(这很重要)。
3.。)从UITableViewController调用- [self.view setFrame:]
,但它什么也没做。
如果你有任何想法如何解决,请与我分享!
答案 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