2017-02-08 3 views
2

У меня есть UITextView внутри пользовательской ячейки TableView. Я хочу, чтобы текстовое представление по умолчанию прокручивалось вверх. Я обычно делаю это так на обычных взглядах:iOS - Прокрутка TextView сверху, когда он находится в ячейке tableview

override func viewDidLayoutSubviews() { 

    super.viewDidLayoutSubviews() 
    let fixedWidth = bioView.frame.size.width 
    bioView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)) 
    let newSize = bioView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)) 
    var newFrame = bioView.frame 
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
    bioView.frame = newFrame; 
    bioView.scrollRangeToVisible(NSRange(location:0, length:0)) 
} 

bioView - это мой объект для просмотра текста. Однако это не работает в моем случае, поскольку я не могу ссылаться на textview в классе ViewController и может это сделать только в классе CustomCell, и этот класс не может переопределить viewDidLayoutSubviews. Любая помощь?

+0

Поскольку все ячейки используются повторно, не можете ли вы иметь ссылку на свой пользовательский объект соты в своем диспетчере просмотра и получить доступ к текстовому виду и т. Д. Оттуда? – Danoram

+0

Пробовал это сейчас, не работал :( – rrdev

ответ

0

Попробуйте это.

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell* cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"]; 
    [cell.textView scrollRangeToVisible:NSMakeRange(0, 0)]; 
    return cell; 
} 

Swift 3,0:

let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) as! DemoCell 
    cell.textView.scrollRangeToVisible(NSRange(location:0, length:0)) 

Это работает! Тем не менее, таблица должна прокручивать, чтобы изменения вступили в силу, лучший способ, который я нашел до сих пор. Всем спасибо!

+0

Спасибо за ваш ответ , тоже не работал :(Любые другие идеи? – rrdev

+0

Я пробовал это и прекрасно работал, возможно, я понял, что вы ошибаетесь. –

0

На ваш взглядКонтроллер, который обрабатывает UITableViewDelegate события, переопределяет willDisplayCell метод. Определите свой TextView из ячейки и напишите код для прокрутки.

+0

Спасибо за ваш ответ, я не нашел «willDisplayCell», я пробовал делать это по методу cellForRowAt, но он тоже не работал. Я даже создал ссылку на ячейку и использовал это в viewDidLayoutSubviews, но не работал. Любые другие идеи? Действительно оцените это! – rrdev

+0

Это имя функции в Swift: func tableView (UITableView, willDisplay: UITableViewCell, forRowAt: IndexPath) – Apurv

0

Я пытался делать скроллинг, либо с scrollRangeToVisible() или установкой contentOffset в .zero в awakeFromNib, willDisplayCell и cellForRowAtIndexPath. Все они выполняются, но прокрутка по-прежнему сбрасывается (через AutoLayout?) Через некоторое время после этого.

Для ячейки, которая отображается на экране при появлении UITableView, выполнение прокрутки в willDisplayCell не «прилипает». Это делает работы, если ячейка прокручивается и прокручивается назад на экране.

Для ячейки, которая уже находится на экране с UITextView с текстом «слишком много», чтобы прокручивать нижнюю часть TextView, единственный способ, которым я нашел, чтобы текст прокручивался вверху, - это установить либо scrollRangeToVisible(), либо contentOffset в viewDidAppear() UITableViewController. Даже viewWillAppear() не работал.

Один из недостатков заключается в том, что это решение вызывает скачок в местоположении прокрутки после появления на экране TableView даже в блоке performWithoutAnimation.

Вы можете поместить код в viewDidLayoutSubviews, и он будет работать, но, как уже упоминалось, это называется несколько раз, и текст будет прокручиваться назад к началу с каждым изменением ориентации, что может быть нежелательно.