Я просматриваю книгу по разработке 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, чтобы вести себя так, как я хочу?
Спасибо за ответ попробовать, однако вызов 'contentSizeForViewInPopover' в методе инициализации моих' ImageViewController' не меняют результатов. – Shotty