2013-05-11 4 views
0

Я просматриваю книгу по разработке iOS, и я создаю тестовое приложение для iPad. Я пытаюсь создать popover при запуске на iPad, который отображает UIScrollView, показывающий UIImage, который пользователь может прокручивать.Понимание поведения размера UIScrollView при использовании UIPopoverController

Проблема, с которой я сталкиваюсь, заключается в том, что при загрузке popover изображение было растянуто, чтобы точно соответствовать размеру popover (делая прокрутку как бесполезным, так и не работающим).

Я не могу понять поведение моего приложения. Я создаю новый UIPopoverController, когда пользователь нажимает на UIButton внутри ячейки в UITableView.

ItemsViewController.m

CGRect rect = [[self view] convertRect:[sender bounds] fromView:sender]; 
ImageViewController *ivc = [[ImageViewController alloc] init]; 
[ivc setImage:img] 

// Present a popover from the rect 
imagePopover = [[UIPopoverController alloc] initWithContentViewController:ivc]; 
[imagePopover setDelegate:self]; 
[imagePopover setPopoverContentSize:CGSizeMake(600.0, 600.0)]; 
[imagePopover presentPopoverFromRect: rect inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

я создаю UIScrollView и UIImageView программно следующим образом внутри моего ImageViewController.

ImageViewController.m

- (id)init { 
    if (self = [super init]) { 
     scrollView = [[UIScrollView alloc] init]; 
     imageView = [[UIScrollView alloc] init]; 
    } 
    return self; 
} 

Чтобы попытаться выяснить, почему scollView сбрасывает его размер времени на пирог показала на экране, я создал небольшой метод, чтобы распечатать размер кадра scrollView, размера кадра изображения и размера содержимого scrollView.

Внутри viewDidLoad Я установил изображение ImageView (и отрегулировал размер). Я также добавляю imageView в scrollView.

ImageViewController.m

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [imageView setImage:[self image]]; 
    [imageView sizeToFit]; 

    [scrollView addSubview:imageView]; 
    [[self view] addSubview:scrollView]; 

    [scrollView setContentSize:[self image].size]; 

    [self logSizesFromMethod:_cmd]; 
} 

Я вхожу размеры внутри viewWillAppear и viewDidAppear, а также.

ImageViewController.m

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [self logSizesFromMethod:_cmd]; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

    [self logSizesFromMethod:_cmd]; 
} 

В конце концов, я получаю следующий вывод из консоли.

Homepwner[12188:11303] viewDidLoad - imageView.frame - Width:1400.000000, Height: 1060.000000 
Homepwner[12188:11303] viewDidLoad - scrollView.frame - Width:320.000000, Height: 548.000000 
Homepwner[12188:11303] viewDidLoad - scrollView.contentSize - Width:1400.000000, Height: 1060.000000 
Homepwner[12188:11303] viewWillAppear: - imageView.frame - Width:1400.000000, Height: 1060.000000 
Homepwner[12188:11303] viewWillAppear: - scrollView.frame - Width:320.000000, Height: 548.000000 
Homepwner[12188:11303] viewWillAppear: - scrollView.contentSize - Width:1400.000000, Height: 1060.000000 
Homepwner[12188:11303] viewDidAppear: - imageView.frame - Width:600.000000, Height: 600.000000 
Homepwner[12188:11303] viewDidAppear: - scrollView.frame - Width:600.000000, Height: 600.000000 
Homepwner[12188:11303] viewDidAppear: - scrollView.contentSize - Width:600.000000, Height: 600.000000 

Я могу понять, почему размер кадра Scrollview установлен в какой-то по умолчанию как viewDidLoad называется это до того, как поповер знает, какого размера она должна представить себя. То есть, viewDidLoad вызывается до того, как setPopoverContentSize вызывается внутри ItemsViewController.

Если я установил размер кадра scrollView, размер кадра imageView и scrollView contentSize вручную в методе viewDidAppear, popover появится точно так, как я хочу, пока не попытаюсь прокрутить с помощью мыши, а затем все сразу отскакивает назад до 600x600.

Почему размер кадра scrollView, размер кадра imageView и scrollView contentSize все сбрасываются до 600x600 после просмотраWillAppear, но перед viewDidAppear?

Я предполагаю, что я не понимаю некоторые основные здесь, что мне нужно изменить для UIScrollView внутри моего UIPopoverController, чтобы вести себя так, как я хочу?

ответ

0

установка contentSizeForViewInPopover propetry от ImageViewController объекта до нужного размера

+0

Спасибо за ответ попробовать, однако вызов 'contentSizeForViewInPopover' в методе инициализации моих' ImageViewController' не меняют результатов. – Shotty

Смежные вопросы