UITableViewController最后一行被切断了

时间:2011-10-06 18:39:14

标签: iphone objective-c ios uitableview

我遇到了一个问题,在我的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

中的任何位置调整框架大小

7 个答案:

答案 0 :(得分:16)

在界面构建器中,选择UITableView,然后在“查看”选项下删除底部自动调整栏。如果它们与下面的屏幕截图不同,您可以将所有其他人保留原样。重要的是底部垂直条。

改变这个:

Before

对此:

After

或者,以编程方式执行:

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中的部分页脚高度即可解决问题。

enter image description here

答案 5 :(得分:0)

使用自动布局时,请确保tableView的底部约束相对于其容器设置为0。

用于设置代码(PureLayout)

[tableView autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:containerView withOffset:0];

答案 6 :(得分:-1)

可能是您的约束,直到我发现表视图被限制为Superview的高度和宽度,但意外地将其置于安全区域x和y的中心时,这个问题才被切断。