[英]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.