iPhone UIScrollПросмотреть, как правильно масштабировать вид?В настоящее время его высота не настроена должным образом - PullRequest
3 голосов
/ 07 января 2012

У меня есть UITableView в UIScrollView. Мне потребовалось довольно много работы, чтобы заставить это работать.

TableView имеет размер 640x350 , я использую представление прокрутки для прокрутки от одного конца ячейки к следующему. Представление прокрутки - 320x350. Размер содержимого представления прокрутки составляет 640x350

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

Прежде всего я хотел бы понять, является ли это правильным поведением или результатом размера содержимого моего tableView и манипуляций с фреймами. Табличное представление имеет все пружины и распорки, установленные в конструкторе интерфейсов, и должно заполнять доступный кадр. Это моя первая попытка увеличения за месяцы, и я не помню, как это работает с увеличением.

Может кто-нибудь помочь мне понять, где и что мне нужно настроить?

Насколько я понимаю, мне нужно поместить код в scrollViewDidZoom:, который будет манипулировать рамкой tableView и размером содержимого.

PS. Я возвращаю табличное представление из viewForZooming: метод UIScrollView

1 Ответ

1 голос
/ 18 февраля 2012

То, что вы пытаетесь достичь, довольно сложно.

Решение 1 Это решение использует точную настройку (UITableView внутри UIScrollView).

Вы говорите, что когда вы устанавливаете zoomScale на 0.5, вы хотите, чтобы ваш табличный вид заполнял scrollView по вертикали. При 0,5 ваш табличный вид должен быть 640x700 , чтобы заполнить UIScrollView, как вы хотите. Чтобы это произошло, в scrollViewDidZoom: вы должны изменить размер фрейма таблицы до 640x700


- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
    // No matter what the zoomScale is, the tableView will be zoomed accordingly
    // Only zoom the height of the table
    tableView.frame = CGRectMake(0, 0, 640, 350 / zoomScale);

    // Also, update the contentSize
    scrollView.contentSize = CGSizeMake(640, 350 / zoomScale);
}

Если вы запустите приведенный выше код для zoomScale = 0.5, вы получите размер кадра 640x700 .

Это только меняет рамку таблицы и не меняет высоту ячеек. Это означает, что при уменьшении вы также увидите больше ячеек в табличном представлении.

Решение 2 Использовать только UITableView

UITableView является подклассом UIScrollView. Это означает, что он может масштабировать и прокручивать.

Начните с UITableView с размером, который вы хотите на экране. Затем, после загрузки контента, измените contentSize и сделайте его шире, чем ширина вашего кадра. Это должно включить горизонтальную прокрутку.

Однако для фреймов UITableViewCell автоматически устанавливается ширина фрейма табличного представления. Вы можете обойти это, используя пользовательский UITableViewCell с clipsToBounds=false. Внутри него вы вставите UIView с рамкой, установленной на желаемую ширину и высоту, без автоматического изменения размера маски. Когда табличное представление изменит размер фрейма UITableViewCell, это не повлияет на ваш внутренний UIView.

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