Я видел, что этот вопрос решался несколько раз здесь, на SO, например, Проблема со смещением содержимого UIScrollView , но я до сих пор не могу ее решить.
Мое приложение для iphoneв основном контроллер панели вкладок с панелью навигации.У меня есть программный контроллер табличного представления и DetailViewController, который вставляется, когда я нажимаю на ячейку в моем контроллере табличного представления.
DetailViewController выполнен в IB и имеет следующую иерархию:
вид сверху => UIScrollView => UIView => UIImage и UITextField.
Моя цель - прокрутить изображение и текстовое поле, и это хорошо работает.Проблема в том, что мой UIScrollView всегда располагается внизу, а не вверху.
После рекомендации ее в SO, я сделал мой UIScrollView такого же размера, как и вид сверху, и вместо этого сделал UIView с максимальной высотой (1500) содержимого моей переменной.
В ViewDidLoad я установил contentSize для UIScrollView (так как он недоступен из IB):
- (void)viewDidLoad {
[scrollView setContentSize:CGSizeMake(320, 1500)];
[scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
NSLog(@"viewDidLoad: contentOffset y: %f",[scrollView contentOffset].y);
}
Конкретно устанавливая contentOffset, я бы ожидал, что мой scrollView всегда будет заканчиваться наТоп.Вместо этого он всегда идет ко дну.Мне кажется, что после этого метода происходит неконтролируемая автопрокрутка.
Мое чтение содержимого contentOffset выглядит нормально.Мне кажется, что могут быть некоторые проблемы, связанные с синхронизацией, поскольку результат прокрутки может варьироваться независимо от того, является ли анимация ДА или НЕТ.
Уродливый обходной путь, который я обнаружил, заключается в использовании этого метода делегата:
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrView {
NSLog(@"Prog. scrolling ended");
[scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
}
Это выводит мой скролл-ап наверх, но заставляет его отскакивать вниз и вверх, как йо-йо
Другая подсказка может заключаться в том, что хотя мои переменные экземпляра для IBOutlet установлены до Iнажмите контроллер представления, когда в первый раз появится пустое изображение и текстовое поле:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (!detailViewController) {
detailViewController = [[DayDetailViewController alloc] init];
}
// Pass dictionary for the selected event to next controller
NSDictionary *dict = [eventsDay objectAtIndex:[indexPath row]];
// This method sets values for the image and textfield outlets
[detailViewController setEventDictionary:dict];
// Push it onto the top of the navigation controller´s stack.
[[self navigationController] pushViewController:detailViewController animated:NO];
}
Если я установлю анимацию на YES и переключу порядок настройки IBOutlet и pushViewController, я могу избежать пустоты при инициализации,Почему?
Любая помощь в этих вопросах высоко ценится, поскольку это действительно сводит меня с ума!