iOS - 当它在tableview单元格中时,将TextView滚动到顶部

时间:2017-02-08 05:59:42

标签: ios swift uitableview uitextview

我在自定义UITextView单元格中有一个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。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

试试这个。

-(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))

有效!但是,该表必须滚动才能使更改生效,这是迄今为止我找到的最佳方法。感谢大家!

答案 1 :(得分:0)

在处理UITableViewDelegate事件的viewController中,覆盖willDisplayCell方法。从Cell中识别textView并编写代码以进行滚动。

答案 2 :(得分:0)

我尝试使用scrollRangeToVisible()进行滚动,或者在contentOffset.zeroawakeFromNib中将willDisplayCell设置为cellForRowAtIndexPath。这些都会被执行,但滚动仍然会在此后的某个时间重置(通过AutoLayout?)。

对于出现UITableView时屏幕上的单元格,在willDisplayCell中执行滚动操作不会“粘住”。#34;如果单元格滚动并在屏幕上向后滚动, 可以正常工作。

对于已经在屏幕上的单元格,其中包含一个带有"太多的UITextView"文本以便它滚动出TextView的底部,我发现将文本滚动到顶部的唯一方法是在scrollRangeToVisible()中设置contentOffsetviewDidAppear()的UITableViewController。即使viewWillAppear()也无效。

一个缺点是,即使在performWithoutAnimation块中,TableView出现在屏幕上之后,此解决方案也会导致滚动位置跳转。

您可以将代码放在viewDidLayoutSubviews中,它会起作用,但如上所述,这会被多次调用,并且文本将在每次方向更改时滚动回到顶部,这可能是不可取的。< / p>