UIScrollView изменение высоты - PullRequest
0 голосов
/ 22 июля 2010

У меня есть UITableView, содержащий список карт.Когда элемент выбран, новый подвид добавляется в главное окно и отображается карта.В моем контроллере представления для отображения карты при каждом отображении вызывается следующий метод:

- (void)showMap {
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:mapImage]];

float imageHeight = tempImageView.image.size.height;
float targetHeight = scrollView.frame.size.height - mapNavigationController.navigationBar.frame.size.height;

scrollView.contentSize = tempImageView.image.size;
scrollView.maximumZoomScale = 1.0;
scrollView.minimumZoomScale = targetHeight / imageHeight;
scrollView.clipsToBounds = YES;

self.imageView = tempImageView;
[tempImageView release];

[scrollView addSubview:imageView];
scrollView.zoomScale = scrollView.minimumZoomScale;}

Новый UIImageView добавляется каждый раз в UIScrollView, а когда представление исчезает, UIImageView удаляется.Масштаб масштабирования рассчитывается таким образом, чтобы изображение соответствовало соотношению сторон.

Теперь для моей проблемы при первом нажатии на элемент все работает нормально, и изображение карты заполняет всю высоту UIScrollView, но следующееПри щелчке по элементу высота UIScrollView становится меньше.Я также должен отметить, что главное окно содержит панель вкладок.

Итак, теперь мои вопросы:

  • Как UIScrollView может изменить свой размер?
  • ИЕсть ли другой динамический способ получить targetHeight?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 06 февраля 2011

У меня была похожая проблема. Оказывается, проблема заключалась в том, что я подклассифицировал UIScrollView для основного вида моего UIViewController, а у UIViewController были свои представления о правильном размере представления прокрутки.

Я исправил это, сделав основной класс подклассом UIView вместо UIScrollView, затем добавив UIScrollView* content_view к представлению и добавив мои подпредставления в content_view вместо self.

Не уверен, помогает ли это вам или нет, однако ...

0 голосов
/ 24 июля 2010

Хорошо, мне удалось найти решение для себя, возможно, не самое лучшее, но оно динамичное и оно работает.

Но я все еще не понимаю, почему высота UIScrollView изменится.Если кто-то знает, почему, пожалуйста, прокомментируйте.

NSInteger scrollViewHeight = 0;

- (void)showMap {
    if (scrollViewHeight == 0) {
        scrollViewHeight = scrollView.frame.size.height;
    } else {
        scrollView.frame.size.height = scrollViewHeight;
    }

    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:mapImage]];

    float imageWidth = tempImageView.image.size.width;
    float imageHeight = tempImageView.image.size.height;
    float targetWidth = scrollView.frame.size.width;
    float targetHeight = scrollViewHeight - mapNavigationController.navigationBar.frame.size.height;
    float scale = targetHeight / imageHeight;

    if (scale * imageWidth < targetWidth) {
        scale = targetWidth / imageWidth;
    }

    scrollView.contentSize = tempImageView.image.size;
    scrollView.maximumZoomScale = 1.0;
    scrollView.minimumZoomScale = scale;
    scrollView.clipsToBounds = YES;

    self.imageView = tempImageView;
    [tempImageView release];

    [scrollView addSubview:imageView];
    scrollView.zoomScale = scale;}
}
...