2013-06-10 1 views
1

Я пытаюсь внедрить UITableViews в UIScrollView с iOS6 и автозагрузкой.UITableViews в UIScrollView с Autolayout

Я сделал это несколько раз до iOS 6 со стойками и пружинами. Я добавил tableviews как subviews моего scrollview, установив соответствующие кадры и размеры контента. Он работал очень хорошо, позволяя пользователю прокручивать таблицы, но он больше не работает для экрана 3,5 дюйма и 4 дюйма на iPhone 5.

Высота прокрутки правильно изменяется, но высота подвидов нет, и есть пустое пространство под ними на 4" экранами.

Я сделал свой ViewController в IB, добавил UIScrollView, то я добавляю представления таблиц программным способом.

Я ve нашел обходное решение, которое устанавливает размер кадра и размер в методе -viewDidAppear, но вызывает прокрутку scrollview, поскольку он изменяется после представления пользователю viewcontroller.

В настоящее время я смотрю NSLayoutConstraint, без большого успеха.

Неужели кто-то уже сталкивался с той же проблемой?

Вот мой текущий код:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self composeScrollView]; 
} 

- (void)composeScrollView { 
    // set up scrollview 
    CGSize scrollViewContentSize = _scrollView.bounds.size; 
    scrollViewContentSize.width *= self.tableViewsList.count; 
    _scrollView.contentSize = scrollViewContentSize; 

    CGPoint contentOffset = _scrollView.bounds.origin; 
    contentOffset.x = _scrollView.bounds.size.width * self.tableIndex; 
    _scrollView.contentOffset = contentOffset; 

    _scrollView.directionalLockEnabled = YES; 

    for (int i = 0; i < self.tableViewsList.count; i++) {   
     CGRect tableViewRect = _scrollView.bounds; 
     tableViewRect.origin.x = tableViewRect.size.width *i; 

     UITableView *tableView = [[UITableView alloc] initWithFrame:tableViewRect style:UITableViewStylePlain]; 
     tableView.delegate = self; 
     tableView.dataSource = self; 
     tableView.directionalLockEnabled = YES; 

     [_scrollView addSubview:tableView]; 
    } 
} 

Я видел этот вид макета во многих IOS приложения, так что я полагаю, что решение может быть полезным для многих из нас.

Я хотел бы добавить картинки, чтобы быть более ясными, но у меня недостаточно репутации.

ответ

1

Авто-макет еще не установил рамки в viewDidLoad. В viewDidAppear у него есть, так что теперь все работает. Лучший способ сделать это в viewDidLayoutSubviews или viewWillLayoutSubviews.

+0

Взгляните на http://stackoverflow.com/questions/16096021/autolayout-a-uiscrollview-to-fit-content-including-subviews-and-grouped-tables или http://stackoverflow.com/questions/16699920/ios-6-autolayout-with-multiple-tableviews-all-dynamic-height/16701733 # 16701733 тоже. – James