我有一個UICollectionView在我的故事板iOS應用程序。 當設備處於縱向方向時,我希望它垂直滾動,當它在Landscaper中時,我希望它水平滾動。如何更改UICollectionView中的滾動方向?
在UICollectionView我可以看到scrollEnabled成員,但我看不到設置滾動方向。我錯過了什麼嗎?
我有一個UICollectionView在我的故事板iOS應用程序。 當設備處於縱向方向時,我希望它垂直滾動,當它在Landscaper中時,我希望它水平滾動。如何更改UICollectionView中的滾動方向?
在UICollectionView我可以看到scrollEnabled成員,但我看不到設置滾動方向。我錯過了什麼嗎?
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'適用。 –
謝謝@Mundi,你怎麼知道這個東西?無論如何,一些代碼爲我自己的筆記:'如果讓flowLayout = collectionViewLayout爲? 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的回答爲他們的答案,這裏是swift 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)horizontalSizeClass尚未更改,滾動方向設置不正確2)scrollingDirection設置正確,但已爲時過晚並且不起作用,3)所有內容都正確排列並且滾動方向實際上根據需要生效。看起來也許蘋果計劃在視圖控制器中管理滾動方向而不是佈局。 – BTRUE