2016-09-18 72 views
3

更新:這是一個iOS 10問題。這仍然可以在iOS 9中使用。iOS 10期:UIScrollView不滾動,即使設置ContentSize時

這是......有趣的。

我只是轉換我的「教學計劃」(「玩具」的應用程序),以斯威夫特3.

它一直致力於爲雨燕1.2在一兩年。

突然間,我的UIScrollView沒有滾動,即使當我將contentSize方法設置爲超越其下限時。

這裏的有關代碼(displayTags程序被調用與被顯示爲中心並且稍微垂直偏移圖像的陣列,導致豎直鏈):

/*******************************************************************************************/ 
    /** 
     \brief Displays the tags in the scroll view. 

     \param inTagImageArray the array of tag images to be displayed. 
    */ 
    func displayTags (inTagImageArray:[UIImage]) 
    { 
     self.tagDisplayView!.bounds = self.tagDisplayScroller!.bounds 
     if (inTagImageArray.count > 0) // We need to have images to display 
     { 
      var offset:CGFloat = 0.0 // This will be the vertical offset for each tag. 

      for tag in inTagImageArray 
      { 
       self.displayTag (inTag: tag, inOffset: &offset) 
      } 
     } 
    } 
    /*******************************************************************************************/ 
    /** 
     \brief Displays a single tag in the scroll view. 

     \param inTag a UIImage of the tag to be displayed. 
     \param inOffset the vertical offset (from the top of the display view) of the tag to be drawn. 
    */ 
    func displayTag (inTag:UIImage, inOffset:inout CGFloat) 
    { 
     let imageView:UIImageView = UIImageView (image:inTag) 
     var containerRect:CGRect = self.tagDisplayView!.frame // See what we have to work with. 
     containerRect.origin = CGPoint.zero 
     let targetRect:CGRect = CGRect (x: (containerRect.size.width - inTag.size.width)/2.0, y: inOffset, width: inTag.size.width, height: inTag.size.height) 
     imageView.frame = targetRect 
     containerRect.size.height = max ((targetRect.origin.y + targetRect.size.height), (containerRect.origin.y + containerRect.size.height)) 
     self.tagDisplayView!.frame = containerRect 
     self.tagDisplayView!.addSubview (imageView) 
     self.tagDisplayScroller!.contentSize = containerRect.size 
     print ("Tag Container Rect: \(containerRect)") 
     print (" Tag ScrollView Bounds: \(self.tagDisplayScroller!.bounds)") 
     inOffset = inOffset + (inTag.size.height * 0.31) 
    } 

注意,滾動視圖的contentSize是每個擴展時間標籤被添加。我檢查了一下(看打印報告),這個值似乎是正確的。

The project itself is completely open-source.

This is where this issue manifests(我有其他錯誤,但在我這個釘子一個我會找固定它們)。

我敢肯定,我正在做一些明顯的和骨頭的事情(通常是這種情況)。

任何人有任何想法?

+0

我認爲問題是與uiview,你沒有設置高度.. – Do2

+0

我會檢查出來。故事板中的高度已設置(並在構建時移除),但我不在此處設置。這是完全可能的,你是正確的。我發現在操作系統升級中,無證件(或未明確說明)的東西通常會發生變化。我只在iOS 10中測試過它。我想知道它是否會在iOS 9中再次運行?如果是這樣,我還有另一個需要調整的應用程序。謝謝! –

+0

嗯,我剛剛檢查出來。適用於9.3,但不適用於10.操作系統引入了曲線球。正在設置高度(請參閱我設置框架)。我需要弄清楚爲什麼iOS 10突然不喜歡這樣。我在另一個應用中做了幾乎完全相同的事情,我很擔心。 –

回答

2

好的。我解決了它。

我在構建時刪除內部(滾動)視圖的每個自動佈局約束。

我假設iOS 10終於通過強制滾動視圖的頂部附加到滾動條的頂部來履行合同,即使用戶想要移動它。

+0

你在運行時刪除了每個約束並且成功了嗎?除了使用Xamarin之外,我看到了同樣的問題,在升級到IOS 10後,我的UIScrollView不再有高度。我可以垂直對齊我的直接子視圖,它顯示但不允許滾動。在ViewDidLoad中移除約束似乎並沒有影響它。 – QckLrner

+1

TBH,我還沒有完全想到這一點。這在那種情況下適用於我。但是,在其他情況下,我使用經典的結構,它的工作原理。我需要花一些時間嘗試一些東西。 –

+0

我設置了一個演示Swift項目來測試這一點。 [這個項目](https://bitbucket.org/bmlt/testscroller)顯示了這一點。 YMMV –

12

它會工作時,你會設置主線程contentSize並把這個代碼- (void)viewDidLayoutSubviews

- (void)viewDidLayoutSubviews 
{ 
    dispatch_async (dispatch_get_main_queue(),^
        { 
         [self.scrollview setContentSize:CGSizeMake(0, 2100)]; 
        }); 
} 
+0

謝謝,我欣賞這個提示,並且給了它一個大拇指。不幸的是,雖然絕對正確,但這不是解決方案。問題在於,如果有頂級約束和主要約束,iOS 10突然開始將滾動視圖固定到容器。我在構建時刪除了這些內容,並解決了這個問題。再次,謝謝。 –

+0

謝謝,它解決了我的問題....! – Alessign

7

contentSize應在迅速主線變化。

DispatchQueue.main.async { 
     self.scrollView.contentSize = CGSize(width: 2000, height: 2000) 
    } 

這對我有效。

+0

這對我來說..這是絕對荒謬的,這不起作用從viewDidAppear – quantumpotato

+0

這也適用於我。我不得不提到的一點是,iPad上的行爲似乎不同,因爲在UI線程上設置contentSize可以很好地工作。 – VSG24

相關問題