2017-02-23 4 views
-1

Xcode8でSwiftコードを2.3から3.0に移行したとき、iOS8のreloadDataの後に、セルの高さの異なるUITableViewが単独でcontentOffsetを変更することが判明しました。しかし、すべてがスウィフトでうまくいった2.3。UITableViewはiOS8のcontentOffsetをswift3で変更します。これはSwift3バグですか?

私はcellForRowAtでcontentOffsetを印刷:とscrollViewDidScroll:以下のような機能:SWIFTの異なるバージョンで

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    print("In scroll: \(scrollView.contentOffset)") 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    print("In cellForRow offset: \(tableView.contentOffset)") 

    //... 
} 

同じコードの実行が、異なる結果を持っています。 swift3で

changed in swift3

、reloadData後、それはiOS8に自身でcontentOffsetを変更します。

swift2.3で

no change in swift2.3

、この問題なし。

私のテストプロジェクト全体が私のGitHubリポジトリをアップロードしました。https://github.com/heqichang/swift3-tableview-issueからクローンを確認またはgitして、iOS8であなたの携帯電話で自分のコードを実行できます。

このswift3のバグですか?

shake in iOS8

UPDATE

私はちょうどiOS10.0.2とiOS8.4とiPhone6pとiPhone5sに自分のコードをテストします。

+0

cellForRowAtの "cell"に書き込んだだけです。indexPath => cell.selectionStyle = .none – iParesh

+0

あなたはバウンス機能をオフにすることができます。 – Anuraj

+0

@iParesh申し訳ありませんが、私の間違いです。私は自分の問題を明確にしなかった。私はtableviewは、reloadDataの呼び出し後にコンテンツのオフセットを変更することを意味します。 –

答えて

0

あなたはcellForRowAt indexPathにセル選択のスタイルを無効にすることができます:私は同じことを見ている

enter image description here

+0

申し訳ありませんが、私の間違いです。私は自分の問題を明確にしなかった。私はtableviewは、reloadDataの呼び出し後にコンテンツのオフセットを変更することを意味します。 –

0

:このコードでIndexPath:インスペクタで

cell.selectionStyle = .none 

やストーリーボードで:UITableViewは、UITableView.reloadData()layout()のプロセス中にそのcontentOffsetを変更できるようになりました。したがって、のようなコード:

someTableView.reloadData() 
someTableView.setContentOffset(CGPoint(x: xPos, y: yPos), animated: false) 

は、表がリロード後xPosyPosで相殺されることを保証するものではありません。 (私はこのバグは、Appleを検討してください。)私のために働いて

回避策の一つはcontentOffsetを設定する前に、レイアウトにテーブルを強制することです:

someTableView.reloadData() 
someTableView.layoutIfNeeded() 
someTableView.setContentOffset(CGPoint(x: xPos, y: yPos), animated: false) 

質問者と同じように、私も、これを見ています可変高さのセルを持つテーブルなので、それが要素になる可能性があります。

+0

iOS8のswift3がheightForRowAt:の最後の行に間に合わないことが判明しました。reloadDataを呼び出した後です。私は問題を解決するためにセクションと行を切り替えました。 –

+0

@QichangHe - 私の問題を解決するためにセクションと行を切り替えましたか?興味深いですね! –

+0

numberOfRowsInSectionに1を返し、numberOfSectionsにセルの番号を返します。 –

関連する問題