2015-11-24 13 views
5

私はの自動行の高さとUITableViewを持っています。 UITableViewCellの中では、最初にプログラムのAutolayout制約を使ってUIButtonを追加します。彼らは私が望むように完全に配置されています。その後、3秒後に(NSTimer)、私はそれらのすべてを削除し、再度別の数を再度追加します。 (例えばのために最初に私は、3秒後に、私は4 UIButtonsこれら4 UIButton秒を削除して、3種類のものを追加しているUITableViewCell内のプログラマティックな自動レイアウト変更は、方向変更後にのみ更新されます

最初:。

Initially 3秒後:

3 seconds later

投稿回転:

enter image description here

どうしてですか?私はAutolayoutの警告が表示されません。また、向きを変更した後は、すべてが正しく配置されます。オリエンテーションの変更が必要なのは何ですか?私はsetNeedsUpdateConstraintslayoutIfNeededlayoutSubviewsを使用してみましたが、無駄に?:どのように私は

PS(これが何をしすぎているようだだけのためにテーブルビューを再ロード)これを手動で強制することができます。

UITableViewCellコードはhttp://pastebin.com/TcHUXgDUです。 (このスペースを汚染しないようにペーストビンを追加しました)しかし、基本的には、のUITableViewというテーブルビューサブクラスの中にあるconfigure:メソッドがあります。このメソッドは、これらの制約を追加します。また、タイマーが起動した後、追加するアイテムの数が最初のアイテムの数と異なる以外は、同じコードが(別の関数で)呼び出されます。

これは私のUITableViewCellレイアウトです:あなたはのUITableViewをリロード必要があります(のみ上部、下部、リード、末尾の制約はUIViewの "Outerview" に追加された)

uitableviewcell layout

+0

いくつかのコードを投稿できますか?それ以前には、セルの高さが変化していることがわかります。これは、ボタンをパディングに押し付けているのに対し、向きの変更によってセルの高さを変えることで問題ありません。 –

+0

私はいくつかのコードを投稿しました。また、向きに先立って、セル高さは3つのセルすべてで一定です。 (あなたのように変化するのと異なります) –

+0

あなたの質問には答えませんが、[Masonry](https://github.com/SnapKit/Masonry)のようなライブラリを使用している場合は、autolayoutをプログラムで実装する方がはるかに良い時間になります – sjwarner

答えて

0

、これは再caculateますセルの高さ

+0

はい、それはuitableviewcellレイアウトの高さを持つ万能薬のようなものですが、uitableviewcellレイアウトで更新を強制する安価な方法があるのだろうかと思っていました。 –

+0

- (void)reloadRowsAtIndexPaths:(NSArray * _Nonnull)indexPaths withRowAnimation:(UITableViewRowAnimation)アニメーション。 UITableViewのドキュメントを確認してください – yanyabo111

+0

結局、テーブルビューをリロードしてしまいました –

関連する問題