Xcode 6 beta4、UIButton は collectionviewcell では責任を負いません
-
20-12-2019 - |
質問
Xcode 6.0 beta 4 を使用していますが、 UICollectionViewCell
タップしても反応しない。
詳細は次のとおりです:
UICollectionViewController
--- UICollectionViewCell
------ UIButton
(UIButton
2つある autolayout
を置く制約 UIButton
縦方向の中央と横方向の中央に Cell
)
今、作ります cell
サイズは次のようなものです:(300、1000)
iPhone シミュレータまたは iOS 7.0 または 7.1.x を搭載したデバイスでアプリを実行すると、ボタンはタッチできませんが、iOS 8.0 シミュレータでテストすると問題ありません。また、セルを変更した場合 size
に (300, 200)
, 、ボタンは機能します。
これはXcodeのベータ版のバグだと思いますよね?
では、どこにバグを Apple に報告すればよいのでしょうか?
解決
UICollectionViewCell の contentView に autoresizingMask を設定するのを忘れています。
これで直ります
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
他のヒント
これは実際にはバグではなく、Xcode 6 を使用して iOS 7 デバイスをターゲットにすることの非互換性の問題であるようです。 エコタックスさんの投稿 これについては詳しく説明していますが、Apple DTS からの応答は次のとおりです。
iOS 7 では、セルのコンテンツ ビューのサイズは自動サイズ変更マスクによって自動的に調整されました。iOS 8 ではこれが変更され、セルは自動サイズ変更マスクの使用を停止し、layoutSubviews でコンテンツ ビューのサイズを変更し始めました。ペン先が iOS 8 でエンコードされ、iOS 7 でデコードされた場合、自動サイズ変更マスクなしでコンテンツ ビューが表示され、ペン先自体のサイズを調整する他の手段もありません。そのため、セルのフレームを変更すると、コンテンツ ビューは追従しません。
iOS 7 に戻すアプリをデプロイする場合は、コンテンツ ビュー自体のサイズを変更したり、自動サイズ変更マスクを追加したり、制約を追加したりして、この問題を回避する必要があります。
ただし、上記の Alexey の解決策はうまくいきます。
- (void)awakeFromNib
{
// Fix for iOS 7 devices targeted using Xcode 6.
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}