我遇到了一个问题,在我的UITableViewController中,最后一行总是截止一半。
如果我有20行,那么第20行将被切断;如果我有30,那么第30个将被切断。
我试图调整contentSize的大小,以及UITableViewController的框架,但它不起作用。
有没有办法将UITableViewController调整到正确的大小?
提前致谢。
一些代码:
在另一个类中初始化它:
settingsTable = [[SettingTableViewController alloc] init];
settingsTable.view.frame = CGRectMake(0, 0, 320, 480);
[self.view addSubview:settingsTable.view];
UITableViewController中的:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [settingsData count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [[settingsData objectForKey:[NSString stringWithFormat:@"%d", section]] objectAtIndex:0];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[settingsData objectForKey:[NSString stringWithFormat:@"%d", section]] objectAtIndex:1] intValue];
}
我没有在UITableViewController
中的任何位置调整框架大小答案 0 :(得分:16)
在界面构建器中,选择UITableView
,然后在“查看”选项下删除底部自动调整栏。如果它们与下面的屏幕截图不同,您可以将所有其他人保留原样。重要的是底部垂直条。
改变这个:
对此:
或者,以编程方式执行:
settingsTable.autoresizingMask &= ~UIViewAutoresizingFlexibleBottomMargin;
修改(来自评论):
您的状态栏是设置为显示还是隐藏?如果显示,则将框架线更改为:
settingsTable.view.frame = CGRectMake(0, 0, 320, 460);
或者,尝试其中任何一项,看看它们是否有用:
settingsTable.view.frame = self.view.bounds;
// or
settingsTable.view.frame = self.view.frame;
答案 1 :(得分:11)
在容器控制器和放大器中使用UITableViewController时半透明的UI条设置), 所以我认为正确处理其contentInset是“app的一面”。
你可以尝试
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 44, 0);
答案 2 :(得分:4)
问题在于这一行:
settingsTable.view.frame = CGRectMake(0, 0, 320, 480);
您没有考虑状态栏的高度(纵向为20像素)。总可用高度实际上是460px而不是480px。这就是为什么你在底部输掉20px的原因。您应该根据父视图边界计算用于布置子视图的帧,而不是硬编码:
settingsTable.view.frame = self.view.bounds;
答案 3 :(得分:1)
您可以使用以下代码
//Checking for device Orientation - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { if (([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeLeft) || ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight)) { NSLog(@"Landscape"); //setting the height of the tableview (height of tableview - height of Navbar) self.messageTableView.contentInset = UIEdgeInsetsMake(0, 0, self.view.frame.size.height-64, 0); } else { NSLog(@"Portrait"); self.messageTableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0); } }
答案 4 :(得分:0)
我在iOS 8
只需调整tableView
中的部分页脚高度即可解决问题。
答案 5 :(得分:0)
使用自动布局时,请确保tableView的底部约束相对于其容器设置为0。
用于设置代码(PureLayout)
[tableView autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:containerView withOffset:0];
答案 6 :(得分:-1)
可能是您的约束,直到我发现表视图被限制为Superview的高度和宽度,但意外地将其置于安全区域x和y的中心时,这个问题才被切断。