2017-03-25 5 views
1

自動レイアウトが完了した後にUICollectionViewCellにあるCALayerにフレーム、コーナーの半径およびその他の操作を設定したいというこの問題が発生しました。しかし、私の驚いたことに、セルのサブビューとcontentViewは(0.0, 0.0, 0.0, 0.0)と表示され、layoutSubviews()がセルのサブクラスで呼び出されました。私は最終的にこの問題の解決策を見つけ出しました。同様の問題に直面している場合は誰もがこれを見ることができるように、投稿しています。UICollectionViewCellのサブビューの幅と高さがゼロです

答えて

1

私は今一週間以上頭を叩いていましたが、ついに!

collectionViewを表示しようとしているセルのcontentViewのための新しいレイアウトサイクルをUICollectionViewDelegatecollectionView(_:willDisplay:forItemAt:)機能を実装し、トリガ:これは私のために完全に働いたものです。

スウィフト:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { 
    cell.contentView.setNeedsLayout() 
    cell.contentView.layoutIfNeeded() 
} 

のObjective-C:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [cell.contentView setNeedsLayout]; 
    [cell.contentView layoutIfNeeded]; 
} 

これは非常に面倒な操作のように見えるかもしれないが、すべての時間は、コレクションビューは、新しいセルを挿入し、自動レイアウトを適用しますセルのframeは、(layoutSubviews()で観察されるように)初期レイアウトサイクル後に通常(0.0, 0.0, 0.0, 0.0)であり、セルが画面上に表示される直前にレイアウトが手動でトリガされた場合、layoutSubviews()にあるサブビューのframeは、自動レイアウトの完了後に期待しているものです。

セル自体だけでなくcontentViewで自動レイアウトがトリガーされていることを確認してください。この手動トリガは煩わしすぎるように見えるかもしれませんが、私が得意なものです。

関連する問題