Как прокрутить UITableView в определенную позицию
Как прокрутить ячейку таблицы до определенной позиции? У меня есть таблица, которая показывает 3 строки (в зависимости от высоты). что я хочу, если я нажимаю на 1-ю строку, а в соответствии с высотой таблицы 1-я строка должна прокручиваться и получать новую позицию (в центре) и одну и ту же для других строк. Я попробовал contenOffset, но не работал.
EDITED:
Короче говоря, как сборщик данных, когда мы выбираем любую строку в подборщике, строка прокручивается к центру.
- UIScrollView не прокручивается после обновления до iOS7 / xcode 5
- Как я могу изменить NSArray в Objective-C?
- Как я могу округлить значение float до двух постсимвольных позиций?
- Как передать объект с помощью NSNotificationCenter
- UIImage imageNamed требует pathForResource?
Благодаря..
- Сохранить фотографии в пользовательский альбом в iPhones Photo Library
- Что такое двойная звезда (например, NSError **)?
- Можете ли вы настраивать анимацию для встраиваемых ячеек UITableView?
- Изменение цвета фона в UIAlertView?
- Программно извлекать использование памяти на iPhone
- Сохранение UIColor и загрузка из NSUserDefaults
- Как обнаружить паузу во вводе для UISearchBar / UITextField?
- Как работает новый механизм автоматического подсчета ссылок?
он должен работать с использованием - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated
используя его следующим образом:
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [yourTableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
atScrollPosition
может принимать любое из этих значений:
typedef enum { UITableViewScrollPositionNone, UITableViewScrollPositionTop, UITableViewScrollPositionMiddle, UITableViewScrollPositionBottom } UITableViewScrollPosition;
Я надеюсь, это поможет вам
ура
[tableview scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
Это приведет к отображению таблицы в первую строку.
наконец, я нашел … это будет хорошо работать, когда таблица отображает только 3 строки … если строки больше изменений, соответственно …
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } // Customize the number of rows in the table view. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 30; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } // Configure the cell. cell.textLabel.text =[NSString stringWithFormat:@"Hello roe no. %d",[indexPath row]]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell * theCell = (UITableViewCell *)[tableView cellForRowAtIndexPath:indexPath]; CGPoint tableViewCenter = [tableView contentOffset]; tableViewCenter.y += myTable.frame.size.height/2; [tableView setContentOffset:CGPointMake(0,theCell.center.y-65) animated:YES]; [tableView reloadData]; }
Используйте [tableView scrollToRowAtIndexPath:indexPath atScrollPosition:scrollPosition animated:YES];
Прокручивает приемник до тех пор, пока строка, указанная указательным путем, не будет находиться в определенном месте на экране.
А также
scrollToNearestSelectedRowAtScrollPosition:animated:
Прокручивает представление таблицы так, чтобы выбранная строка, ближайшая к указанной позиции в представлении таблицы, находилась в этой позиции.
Быстрая версия:
let indexPath:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0) self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.None, animated: true)
Enum: это доступные позиции прокрутки таблицыView – здесь для справки. Вам не нужно включать этот раздел в свой код.
public enum UITableViewScrollPosition : Int { case None case Top case Middle case Bottom }
DidSelectRow:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { let theCell:UITableViewCell? = tableView.cellForRowAtIndexPath(indexPath) if let theCell = theCell { var tableViewCenter:CGPoint = tableView.contentOffset tableViewCenter.y += tableView.frame.size.height/2 tableView.contentOffset = CGPointMake(0, theCell.center.y-65) tableView.reloadData() } }
Стоит отметить, что если вы используете подход setContentOffset
, это может привести к тому, что представление в виде таблицы / коллекции немного setContentOffset
. Я бы честно попытался пойти по этому пути. Рекомендация заключается в том, чтобы использовать методы делегата прокрутки, которые вы даете бесплатно.
Просто одна строка кода:
self.tblViewMessages.scrollToRow(at: IndexPath.init(row: arrayChat.count-1, section: 0), at: .bottom, animated: isAnimeted)