在正确显示之前,尝试调整UITableView的大小会使屏幕出现一秒钟

时间:2012-06-16 19:53:34

标签: iphone ios uitableview uiview uinavigationbar

我在调整UITableView以适应UINavigationBar和UITabBar之间遇到了很多麻烦。我的实现涉及在viewDidAppear()中创建自定义框架,然后将UITableView设置为适当的框架。虽然这种解决方案运行良好,但效果并不理想 - 每次加载视图时屏幕都会有一点痉挛。我认为问题是由于UITableViewb成为全屏,因为它想要,然后我在用户面前调整它的大小。但是,我不知道如何实现我想要的:调整UITableView的大小以适应屏幕。这是我在viewDidAppear()中的实现:

- (void)viewDidAppear:(BOOL)animated{
    [self.view.superview addSubview:navigationBar];

    CGRect frame = self.view.frame;
    frame.size.height = self.view.frame.size.height - navigationBar.frame.size.height;
    frame.origin.y = self.view.frame.origin.y + 44;
    self.tableView.frame = frame;

    [super viewDidAppear:animated];
}

在录制视频时很难看到效果,在GIF格式中可能很糟糕,但here's a little GIF我记录了闪光被诱导。

如果我在viewWillAppear()中使用相同的代码,则结果如下: result

谢谢!

2 个答案:

答案 0 :(得分:1)

我遇到了这个问题,原来这是视图上的自动布局问题。在Interface Builder中,切换到File Inspector属性视图,并确保未选中“Use Autolayout”。

在此之后,您可以在viewWillAppear方法中持续调整UITableView的大小,而不会出现故障。

- (void)viewWillAppear:(BOOL)animated
{
   [super viewWillAppear:animated];
   CGRect frame = [tableView frame];    
   frame.size.height = 365; 
   self.tableView.frame = frame;
}

答案 1 :(得分:0)

为什么使用viewDidAppear,当调用此方法时,您的视图会在屏幕上显示,那么您当然会收到一个小故障。

您需要做的是将方法从viewDidAppear更改为viewWillAppear