0
votes

UINavigationController -> UITabBarController -> UIViewController -> UITableView

I have an UINavigationController with an UITabBarController as its rootViewController, Then put an UITableView in one of the tab(UIViewController)

When i switch to one of the tabController which contains an UITableView, The first cell of the tableView under navigation bar. If i push another view controller, then pop back, the tableview relayout right. How to make it layout right on start.

2

2 Answers

0
votes

do your layout in viewWillAppear can solve the problem

0
votes

I solved it. This is the issue of topLayoutGuide, Fix it (Swift) by override the topLayoutGuide property

override var topLayoutGuide:UILayoutSupport {
    get { return (self.parentViewController?.topLayoutGuide)! }
}

override var bottomLayoutGuide:UILayoutSupport {
    get { return (self.parentViewController?.bottomLayoutGuide)! }
}

(Objective C)

(id<UILayoutSupport>) topLayoutGuide {
return self.parentViewController.topLayoutGuide;

}

  • (id) bottomLayoutGuide { return self.parentViewController.bottomLayoutGuide; }

  • (void) viewWillLayoutSubviews { [super viewWillLayoutSubviews]; //NSLog is required here, just invoke the getter, don't know why in Objective C getter is not invoked by default NSLog(@"%@", self.topLayoutGuide); }

  • (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; //NSLog is required here, just invoke the getter, don't know why in Objective C getter is not invoked by default NSLog(@"%@", self.topLayoutGuide); }