Я пытался реализовать представление, подобное iOS-приложению Twitter. Контроллер представления содержит свиток, который можно прокручивать по горизонтали, на каждой странице прокрутки есть табличное представление. Для простоты я просто создал два UITableView и добавил их внутри двух контейнеров UIView, потому что помимо tableView у меня также есть некоторое представление, чтобы показать, поэтому tableView и все другие представления добавляются в качестве подвидных объектов viewContainer для каждой страницы.Tableview в scrollview не отображается
мнение иерархия выглядит так:
UIViewController
--view
--scrollView
--view1
--tableView1
--someOtherViews
--view2
--tableView2
--someOtherViews
В методах viewDidLoad, я осуществил что-то вроде этого:
-(void)viewDidLoad
{
//Some other setup...
scrollView = [[UIScrollView alloc]initWithFrame(0,y0,self.view.frame.size.width,self.view.frame.size.height-offset)];
scrollView.pageEnabled = YES;
scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height - offset);
[self.view addSubView:scrollView];
view1 = [[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset)];
tableView1 = [[UITableView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset) style:UITableViewStyleGrouped];
tableView1.delegate = self;
tableView1.dataSource = self;
//other setup...
[view1 addSubView:tableView1];
[scrollView addSubView:view1];
view2 = [[UIView alloc]initWithFrame:CGRectMake(self.view.frame.size.width,0,self.view.frame.size.width,self.view.frame.size.height-offset)];
tableView2 = [[UITableView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height-offset) style:UITableViewStyleGrouped];
tableView2.delegate = self;
tableView2.dataSource = self;
//other setup...
[view2 addSubView:tableView2];
[scrollView addSubView:view2];
}
Для целей тестирования, я заполнить тот же источник данных для обеих таблиц. Проблема в том, что если я добавлю только один контейнер tableView (например, view1, который включает tableView1) в качестве подвидного элемента scrollView, представление показывает идеально, можно перейти на вторую страницу, которая пуста, а контроллер вида может быть загружен и показать. То же самое для второго.
Однако, если я использую приведенный выше код, который добавляет оба контейнера представления в качестве подвидного элемента scrollView, приложение будет сбой при загрузке этого контроллера представления. Однако, если я добавлю второй контейнер представления (view2 или view1), но в контейнере представления я не добавляю tableView в качестве своего подвидного, но имеет другие подвид, он отлично работает.
Итак, я понял, что проблема, вероятно, происходит из двух табличных представлений. Тем не менее, я попытался отладить это в течение нескольких часов и до сих пор не повезло. Кто-нибудь может мне помочь?
Спасибо!
Я сомневаюсь, что 'CGRect'' UITableView' специально эта строка 'self.view.frame.size.height-offset' проверяет фрейм. – iphonic
@iphonic Спасибо! Но я немного смущен. Не могли бы вы объяснить больше? CGRect таблицыView является правильным, если у меня есть только один tableView. Вы предлагаете при добавлении двух табличных представлений, CGRect второго из первого фактически изменился? – Jing
Я бы предложил несколько вещей. 1. Ваш процесс неправильный, лучше составить отдельный xib с классом и спроектировать ваше представление. 2. Управляйте всем там, включая источник данных и делегатов и т. Д., И просто используйте xib для добавления напрямую. Может быть несколько причин, по которым его не работает для вас, может быть конфликтующим источником данных, или делегаты не получают вызова и т. Д. – iphonic