1

UICollectionView と、サブビューを含むカスタム UICollectionViewCell があります。この CollectionViewCell 内でいくつかの「難解な」作業を行っており、setFrame を手動で使用してすべてのサブビューを再配置したいと考えています。すべての自動レイアウト動作をオーバーライドするにはどうすればよいですか?

「-(void)layoutSubviews」をオーバーライドしてrectを描画しようとしました。これはうまくいくこともあれば、うまくいかないこともあります。

を使用してセルを取得した場合

UIMyCell *cell = (UIMyCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"UIMyCell" forIndexPath:indexPath];

カスタムセルを取得します。カスタム プロパティを割り当てることができ、すべて問題ありません。ただし、このセルのフレームは最初は (0, 0, 0, 0) です。

しばらくすると、レイアウトが設定されます。サブシステムがサイズを設定している場合、「通知」を受け取りたいです。

次に、自動レイアウトなしですべてのサブビュー フレームを設定したいと思います。

ここでのベストプラクティスは何ですか?

4

1 に答える 1

2

ついに答えを見つけました。OS X(NSView)の場合

 -(void) setFrame:(CGRect)frame

新しいビューの位置とサイズを設定するためにすべての制約が更新された後に呼び出されます。iOSの場合(UIView)

-(void) setCenter:(CGPoint)center
and
-(void)setBounds:(CGRect)bounds 

代わりに呼び出されます。そのため、setFrameの上書きはiOSフレームワークでは機能しません。

于 2013-01-30T11:29:57.720 に答える