私のストーリーボードには、UICollectionViewがあります。iOS appです。 デバイスが縦向きになっているときは縦にスクロールしてください。ランドスケープにあるときは横にスクロールしてください。UICollectionViewでスクロール方向を変更するにはどうすればよいですか?
UICollectionViewでは、scrollEnabledのメンバーが表示されますが、スクロール方向を設定する方法はありません。私は何かを逃したか?
私のストーリーボードには、UICollectionViewがあります。iOS appです。 デバイスが縦向きになっているときは縦にスクロールしてください。ランドスケープにあるときは横にスクロールしてください。UICollectionViewでスクロール方向を変更するにはどうすればよいですか?
UICollectionViewでは、scrollEnabledのメンバーが表示されますが、スクロール方向を設定する方法はありません。私は何かを逃したか?
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
注...
@interface LayoutHorizontalThings : UICollectionViewFlowLayout
@end
@implementation LayoutHorizontalBooks
-(void)prepareLayout
{
[super prepareLayout];
self.scrollDirection = UICollectionViewScrollDirectionHorizontal;
self.minimumInteritemSpacing = 0;
self.minimumLineSpacing = 0;
self.itemSize = CGSizeMake(110,130);
self.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
}
コレクションビューのcollectionViewLayout
のscrollDirection
を設定します。
文書はhereです。あなたのフローレイアウトでprepareForLayout
でこれを呼び出すには罰金であると考えられることにも
あなたは 'UICollectionViewFlowLayout'を使用している場合にのみ適用されます。 –
ありがとう@ムンディ、どうやってこのことを知っていますか?とにかく、自分のメモのためにこれをコード化しています: 'let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout {flowLayout.scrollDirection = .Horizontal} ' –
あなたはこれを試してみてください:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)[self.collectionView collectionViewLayout];
if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)){
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
}
else{
layout.scrollDirection = UICollectionViewScrollDirectionVertical;
}
}
でスウィフト:
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
var layout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
if ((toInterfaceOrientation == UIInterfaceOrientation.LandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientation.LandscapeRight)){
layout.scrollDirection = UICollectionViewScrollDirection.Vertical
}
else{
layout.scrollDirection = UICollectionViewScrollDirection.Horizontal
}
}
答えはMundiとDan Rosenstarkの名誉です。ここには3速版があります。
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.scrollDirection = .horizontal
}
スウィフト4
if let layout = collectionViewObj.collectionViewLayout as? UICollectionViewFlowLayout {
layout.scrollDirection = .vertical // .horizontal
}
このコードをviewdidload()に宣言するには、次のようにします。 – user3040186
http://adoptioncurve.net/archives/2012/09/a-simple-uicollectionview-tutorial/ – user3040186
私はprepareLayoutが断続的に早く呼び出されていないか、あまりにも遅く呼び出されたという問題を見ています。結果は3つのうちの1つです:1)horizontalSizeClassがまだ変更されておらず、スクロール方向が正しく設定されていない2)スクロール方向が正しく設定されているが、遅すぎて効果がなく、3)すべてが正しく整列し、実際には必要に応じて有効になります。アップルがレイアウトの代わりにビューコントローラでスクロールの方向を管理しようとしているようだ。 – BTRUE