2013-08-02 64 views
12

我已經設置了一個UIScrollView,我想要顯示12個圖像(只有8個適合屏幕)水平佈局。在下面的圖片你可以看到我有(這讓我的滾動視圖不滾動),我的約束和我已經在故事板上增加了UIScrollView問題:iOS:Autolayout導致UIScrollView無法滾動

Screenshot of storyboard showing constraints

我已要求下面的方法上-(void)viewDidLoad,其中I 「建立」 我的滾動視圖(itemList中是我的滾動視圖屬性和itemNames中與images'names一個陣列):

- (void)setupHorizontalScrollView 
{ 
    self.itemList.delegate = self; 
    [self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [self.itemList setBackgroundColor:[UIColor blackColor]]; 
    [self.itemList setCanCancelContentTouches:NO]; 

    self.itemList.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    self.itemList.clipsToBounds = NO; 
    self.itemList.scrollEnabled = YES; 
    self.itemList.pagingEnabled = NO; 

    NSInteger tot=0; 
    CGFloat cx = 0; 
    for (; ; tot++) { 
     if (tot==12) { 
      break; 
     } 

     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.itemNames objectAtIndex:tot]]]; 

     CGRect rect = imageView.frame; 
     rect.size.height = 40; 
     rect.size.width = 40; 
     rect.origin.x = cx; 
     rect.origin.y = 0; 

     imageView.frame = rect; 
     [self.itemList addSubview:imageView]; 
     cx += imageView.frame.size.width; 
    } 

    [self.itemList setContentSize:CGSizeMake(cx, [self.itemList bounds].size.height)]; 
} 

我已經添加了[self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO];因爲我在其他帖子上看到了這個建議,但不管用或不用。它的工作原理唯一的方法是如果我在故事板上取消選中使用AutoLayout,但這會將我用作導航欄的屏幕移動到屏幕底部。 我不知道該怎麼辦了,任何幫助表示讚賞:)

回答

9

兩個解決方案:

  1. 創建不同的約束,可以同時滿足(你將不得不修改)。我認爲問題是你的底部空間和頂部空間的限制是相互排斥的。請刪除一個,然後重試。如果這對你很困難,那麼嘗試添加另一個UIView以包含UIScrollView來幫助管理你的約束,起初它可能看起來很奇怪,但有時添加另一個視圖來包含你的視圖實際上使得它在每個級別都更簡單。

  2. 關閉Autolayout,並將您的UIImageView的自動調整大小的掩碼更改爲您所希望的。

+0

我試着刪除其中的一個,但我不知道該怎麼做。你可以告訴我嗎? – dietbacon

+1

單擊約束上的小齒輪圖標,如果它允許您將其移除,或者將其更改爲不太具體(例如變量或自動 - 因此它不關心)。 –

+1

之後,自動佈局對於iOS/Mac用戶界面開發和UI編程將變得越來越重要。嵌入視圖確實幫助我使滾動視圖工作,同時仍然使用自動佈局的所有好處。 –

3

插入:[scrollView setContentSize:CGSizeMake(x,y)];在下面的方法:

-(void)viewWillAppear:(BOOL)animated 
31

嘗試以保持設定的自動版式設置你的滾動視圖的內容大小INT 「viewDidLayoutSubviews」 的方法。

-(void)viewDidLayoutSubviews 
{ 
    [self.itemList setContentSize:CGSizeMake(required_width, required_height)]; 
} 
+0

好了,請告訴我爲什麼我們需要添加此方法。 –

+0

真棒兄弟...不錯的一個謝謝你...它爲我工作也... –

+0

感謝它也爲我工作,但最新的差異+1 – ashokdy