То, что вы пытаетесь достичь, довольно сложно.
Решение 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.