[英]iOS - Scroll TextView to top when it's in a tableview cell
我在自定义TableView
单元格中有一个UITextView
。 我希望文本视图默认滚动到顶部。 我通常在常规视图中这样做:
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是我的文本视图对象。 但是,这在我的情况下不起作用,因为我无法在ViewController
类中引用textview
,并且只能在CustomCell
类中执行此操作,并且该类不能覆盖viewDidLayoutSubviews
。 有帮助吗?
尝试这个。
-(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))
有用! 但是,该表必须滚动才能使更改生效,这是迄今为止我找到的最佳方法。 感谢大家!
在处理UITableViewDelegate
事件的willDisplayCell
,覆盖willDisplayCell
方法。 从Cell中识别textView并编写代码以进行滚动。
我尝试使用scrollRangeToVisible()
或在awakeFromNib
, willDisplayCell
和cellForRowAtIndexPath
willDisplayCell
contentOffset
设置为.zero
进行willDisplayCell
。 这些都会被执行,但滚动仍然会在此之后的某个时间重置(通过AutoLayout?)。
对于出现UITableView时屏幕上的单元格,在willDisplayCell
中执行滚动不会“粘住”。 如果单元格滚动并向后滚动屏幕,它确实有效。
对于已经在屏幕上具有“太多”文本的UITextView以便它滚出TextView底部的单元格,我发现使文本滚动到顶部的唯一方法是设置scrollRangeToVisible()
或者UITableViewController的viewDidAppear()
中的contentOffset
。 即使viewWillAppear()
也无效。
一个缺点是,即使在performWithoutAnimation
块中,TableView出现在屏幕上之后,此解决方案也会导致滚动位置跳转。
您可以将代码放在viewDidLayoutSubviews
,它会起作用,但如上所述,这会被多次调用,并且文本将在每次方向更改时滚动回到顶部,这可能是不可取的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.