【发布时间】:2013-08-27 11:29:34
【问题描述】:
我在基于故事板的 iOS 应用中有一个 UICollectionView。 当设备处于纵向时,我希望它垂直滚动,而当它在 Landscaper 中时,我希望它水平滚动。
在 UICollectionView 我可以看到 scrollEnabled 成员,但我看不到设置滚动方向的方法。我错过了什么吗?
【问题讨论】:
标签: ios objective-c scroll uicollectionview orientation
我在基于故事板的 iOS 应用中有一个 UICollectionView。 当设备处于纵向时,我希望它垂直滚动,而当它在 Landscaper 中时,我希望它水平滚动。
在 UICollectionView 我可以看到 scrollEnabled 成员,但我看不到设置滚动方向的方法。我错过了什么吗?
【问题讨论】:
标签: ios objective-c scroll uicollectionview orientation
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
还要注意,在您的流程布局中以 prepareForLayout 调用它似乎没问题...
@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。
【讨论】:
UICollectionViewFlowLayout。
if let flowLayout = collectionViewLayout as? UICollectionViewFlowLayout { flowLayout.scrollDirection = .Horizontal }
Swift 4 和 4.2
if let layout = collectionViewObj.collectionViewLayout as? UICollectionViewFlowLayout {
layout.scrollDirection = .vertical // .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 的回答,这里是 swift 4.2 版本。
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
flowLayout.scrollDirection = .horizontal
}
【讨论】: