масштабирование UIScrollView contentSize, чтобы соответствовать UIView с переменной высотой UITableView внутри - PullRequest
1 голос
/ 22 сентября 2011

У меня есть uiview с uiscrollview в качестве подпредставления в nib. Затем я загружаю другое uiview с uitableview как подпредставление этого другого uiview (среди других элементов внутри этого представления) как подпредставление uiscrollview.

То есть UISCrollView -> UIView -> UITableView (и некоторые другие представления внутри UIView).

И мне нужно сделать следующее:

Как только я узнаю окончательную высоту таблицы (в зависимости от количества ячеек и их высоты), мне нужно изменить размер uiview, в котором он находится, и, в свою очередь, изменить размер свойства contentSize содержащего scrollview.

Но я не знаю, в какой момент известен окончательный размер табличного представления (поскольку он может динамически изменять размер в зависимости от объема текста, который будут храниться в его ячейках), и я также не знаю, на сколько превысит табличное представление пользовательский интерфейс (который по умолчанию равен 320 x 460).

Я попытался установить представление, содержащее представление таблицы, на высоту 900 для viewdidload и установить его в sizeToFit, надеясь, что оно уменьшится при добавлении ячеек таблицы в представление таблицы (при условии, что при добавлении ячеек кадр представления таблицы будет соответственно масштабироваться) , Но это не похоже на работу.

Есть мысли? Спасибо!

Ответы [ 2 ]

5 голосов
/ 02 ноября 2011

Я просто столкнулся с подобной ситуацией (UIScrollView -> UITableView) и часами бился головой об нее.Короткий ответ таков: правильные размеры для использования в качестве основы для определения размеров не были доступны, пока мой ViewController (управляющий UIScrollView) не был отправлен viewWillAppear:.До этого я обнаружил, что значения были установлены, но часто неверны.(Например, моя первая попытка сделать это была в viewDidLoad:, и значения размеров были изменены там, но они были неправильны !)

Так что мое решениебыло таким образом:

  • В viewDidLoad: заставьте вложенный UITableView reloadData, как только ваши данные будут на месте.
  • в viewWillAppear: выполните следующее (предполагаяtableView - это вложенный UITableView, а scrollView - это включающий UIScrollView):

    tableView.frame = (CGRect){ 
        tableView.frame.origin,
        tableView.contentSize 
    };
    // Finally, set content size based on the last element in the scrollView
    // in my case, the last element IS the tableView, yours might be different
    scrollView.contentSize = 
        CGSizeMake(scrollView.width 
                   - scrollView.contentInset.left
                   - self.scrollView.contentInset.right,
                   tableView.top
                   + tableView.height);
    

Примечание: я получал некоторые очень странные числа, когда проверял их перед viewWillAppear:;например, tableView.contentSize, по-видимому, является продуктом по умолчанию rowHeight * количества строк, игнорируя мои пользовательские высоты строк и исключая любые разделители!Очень странно.

0 голосов
/ 22 сентября 2011

Это только предположение, но поскольку UITableView является подклассом UIScrollView, можете ли вы использовать свойство contentSize, чтобы увидеть его общий размер после вызова reloadData?Вы можете использовать размер табличного представления для изменения размера UIView и contentSize scrollView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...