我在自定义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
。有什么帮助吗?
答案 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
,.zero
和awakeFromNib
中将willDisplayCell
设置为cellForRowAtIndexPath
。这些都会被执行,但滚动仍然会在此后的某个时间重置(通过AutoLayout?)。
对于出现UITableView时屏幕上的单元格,在willDisplayCell
中执行滚动操作不会“粘住”。#34;如果单元格滚动并在屏幕上向后滚动, 可以正常工作。
对于已经在屏幕上的单元格,其中包含一个带有"太多的UITextView"文本以便它滚动出TextView的底部,我发现将文本滚动到顶部的唯一方法是在scrollRangeToVisible()
中设置contentOffset
或viewDidAppear()
的UITableViewController。即使viewWillAppear()
也无效。
一个缺点是,即使在performWithoutAnimation
块中,TableView出现在屏幕上之后,此解决方案也会导致滚动位置跳转。
您可以将代码放在viewDidLayoutSubviews
中,它会起作用,但如上所述,这会被多次调用,并且文本将在每次方向更改时滚动回到顶部,这可能是不可取的。< / p>