2016-10-05 7 views
0

私は下に空のセルがあっても、UITableViewで選択したセルにスクロールする方法を探しています。私の問題は、テーブルビューの下部にセルがない場合、スクロールイベントがスクロールしないことです。swift3 scrollToRow空のセルがある場合でも

回避策として、空のセルを最後に作成して削除しましたが、これは良い解決策ではないと思います。それで、どうやってこれをやるの?

func scrollToSelectedCell(indexPath: IndexPath) { 
    self.tableView.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true) 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    let cell = tableView.cellForRow(at: indexPath) 

    if (cell as? DropDownCell) != nil { 
     self.performSegue(withIdentifier: "showDropDownSelector", sender: cell) 
    } else if (cell as? PickerCell) != nil { 
     self.performSegue(withIdentifier: "showPickerSelector", sender: cell) 
    } else if let tmp_cell = cell as? TextFieldCell { 
     scrollToSelectedCell(indexPath: indexPath) 
     tmp_cell.textField.becomeFirstResponder() 
    } 

} 

答えて

1

あなたはのUITableViewはUIScrollViewのを継承しているという事実を使用して、よりエレガントにこれを行うことができます。

私のコードは次のようになります。これにより、tableViewのコンテンツインセットの設定とコンテンツオフセットの変更の組み合わせを使用できます。

あなたの細胞下のテーブルビュー内の余白を追加するcontentInsetプロパティを使用します。

tableView.contentInset = UIEdgeInsetMake(top: 0, left: 0, bottom: A LARGE NUMBER, right: 0) 

を次にあなたがscrollviewにあるように、コンテンツの初期位置を配置したい場所を設定するためにcontentOffsetを使用します。

助け https://developer.apple.com/reference/uikit/uiscrollview

希望:

tableView.contentOffset = CGPoint(x: 0, y: SOME OTHER LARGE NUMBER TO POSITION CENTRALLY IN THE MARGIN) 

あなたは、より詳細な情報を得ることができます。

関連する問題