У меня есть таблица из 100 строк и вы хотите прокручивать ее программно любому элементу и выбирать этот элемент. В первом контроллере я указываю строку и раздел и нажимаю контроллер с UITableView на стек навигации. В viewWillAppear
из «Tableview-контроллер» Я использую код:UITableView не PROPERLY прокрутка вниз программно
[tableView_ selectRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
Любопытно часть, она идеально прокручивает любому из 99 первых строк, получает выбран 100-й строки, но остается «ниже» видимой области , Мне нужно прокрутить таблицу вручную, чтобы открыть ее.
Если я поместил этот код в viewDidAppear
, таблица прокручивает красиво, но после заметной задержки.
Что я и пытаюсь:
- Снижение высоты Tableview. Я получил tableView, который частично покрывает экран с последней строкой, скрытой действительно.
- Игра с contentSize - настройка его высоты на небольшие большие значения - не повезло.
- Установка
contentInset.bottom
- работал, но у меня есть бесполезное пространство внизу. В
viewDidAppear
, обработка 99 строк, как обычно, и установка пользовательскихcontentOffset
для 100-й строки:offset.y += tableView_.contentSize.height - tableView_.bounds.size.height + 44;
работал тоже, но это, как представляется, некрасиво способом.
Итак, что я должен сделать, чтобы получить мой Tableview предварительно прокручиваются даже 100-го элемента, когда появляется «Tableview-контроллер»?
ОБНОВЛЕНИЕ. я не использую никаких xibs или раскадровки, только задающие взгляды в viewDidLoad:
- (void)viewDidLoad {
[super viewDidLoad];
tableView_ = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped];
tableView_.dataSource = self;
tableView_.delegate = self;
tableView_.sectionFooterHeight = 0.0f;
self.view = tableView_;
numbers = [NSMutableDictionary dictionary];
numberSectionTitles = [NSMutableArray array];
//... some model initialization
headerView = [[UIView alloc] initWithFrame:(CGRect){0, 0, 320, 60}];
headerView.backgroundColor = [UIColor greenColor];
UILabel *l = [[UILabel alloc] initWithFrame:(CGRect){20, 20, 280, 20}];
l.textColor =[UIColor whiteColor];
l.tag = 121;
[headerView addSubview:l];
}
и настроить выбор в viewDidAppear (грязные обходные)
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
int row = _selectedIndex % 10;
int section = (_selectedIndex - row)/10;
if(row == 9 && section == 9){
CGSize contentSize = tableView_.contentSize;
CGPoint offset = tableView_.contentOffset;
offset.y += tableView_.contentSize.height - tableView_.bounds.size.height + 44;
tableView_.contentOffset = offset;
}
[tableView_ selectRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section] animated:NO scrollPosition:UITableViewScrollPositionMiddle];
}
Спасибо, полезное упоминание, но мой TableView представляет собой вид контроллера: 'tableView_ = [[UITableView Alloc] initWithFrame: self.view.bounds style: UITableViewStyleGrouped]; ' ' self.view = tableView_; ' –
имеют подкласс под« UITableView »? или вы перетащили таблицу? пожалуйста, предоставьте больше информации, чтобы решить проблему. – Nitin
ознакомьтесь с обновлением –