2017-06-05 55 views
0

我一直在嘗試這個相當長的一段時間,並經歷了很多SO和一些視頻教程的帖子。我想製作的是在它的一些按鈕水平滾動視圖,類似這樣的:enter image description here水平UIScrollView使用自動佈局

我的看法層次結構如下所示:

  • 視圖控制器
    • 查看
      • 滾動查看
        • 查看 個
          • 按鈕

我已經設置頂部,前置,底部約束來滾動視圖。我已經將它的寬度設置爲它的超級視圖,並將它的高度設置爲200.對於滾動視圖內的視圖,我已經將它的約束前導,尾隨,頂部和底部設置爲零,相對於它的超級視圖即滾動視圖。我已經把它的寬度等於視圖控制器視圖,因爲這是解決這個問題的模糊寬度問題。它解決了這個問題。現在我添加了所有按鈕,並將它們的約束設置爲其父視圖。現在,當我運行該應用程序時,會出現類似上面添加的屏幕截圖的屏幕,但無法滾動到最後一個元素。任何幫助都非常令人滿意。在BTN enter image description here

+0

你必須設置了滾動的內容視圖的等於最後寬按鍵x軸+最後一個按鈕的寬度 –

+0

您需要添加的UIView內滾動視圖將作爲滾動視圖的內容查看,因爲你需要水平滾動,因此contentView的寬度應該大於scrollview的框架,因此請添加與scrollview的高度相同的高度約束,並將寬度設置爲較大的值,例如2000.現在,創建一個寬度約束的IBOutlet,您將調整它根據你的內容,在設置containerView之後,在contentView上添加所有按鈕而不是滾動視圖..並根據最後添加的按鈕計算containerView的寬度,並且你的滾動視圖應該可以工作。 – iphonic

+0

Humm,我認爲你搞亂了滾動視圖的可滾動內容的內容大小。您必須設置滾動視圖的內容視圖(您已將視圖放置爲超級按鈕視圖),確保該視圖的寬度約束符合您的要求,即等於所有按鈕的總和寬度+所有間距之和按鈕,你可以發佈你的項目git鏈接,以便我可以爲你解決。 – dip

回答

0
@IBOutlet weak var scrollView: UIScrollView! 

    @IBOutlet weak var btnBack: UIButton! 
    @IBOutlet weak var btnForward: UIButton! 

let headerView = UIView() 
     headerView.backgroundColor = UIColor.white 

     for i in 0..<selectedRestaurant.multipleImages.count { 
      let url = selectedRestaurant.multipleImages[i] 

      let imgView = UIImageView() 
      imgView.frame = CGRect(x: CGFloat(i) * self.view.frame.size.width, y: 0, width: self.view.frame.size.width, height: scrollView.frame.size.height) 

      let task = URLSession.shared.dataTask(with: URL(string: url as! String)!, completionHandler: { (data, response, error) in 

       if error == nil { 
        if data != nil { 
         imgView.contentMode = UIViewContentMode.scaleAspectFill 
         imgView.image = UIImage(data: data!) 
        } 
       } 



     }) 
       scrollView.addSubview(imgView) 
scrollView.contentSize = CGSize(width: self.view.frame.size.width * CGFloat(selectedRestaurant.multipleImages.count), height: scrollView.frame.size.height) 

寫代碼回點擊< < < <

let index = Int(scrollView.contentOffset.x/self.view.frame.size.width) - 1 
     print("\(index)") 
     if index >= 0 { 
      scrollView.setContentOffset(CGPoint(x: CGFloat(index) * self.view.frame.size.width, y: 0), animated: true) 
     } 

寫代碼BTN接下來點擊>>>>>

let index = Int(scrollView.contentOffset.x/self.view.frame.size.width) + 1 
     print("\(index)") 
     if index < (selectedRestaurant.multipleImages.count) { 
      scrollView.setContentOffset(CGPoint(x: CGFloat(index) * self.view.frame.size.width, y: 0), animated: true) 
     } 
1

它是如此簡單。

  1. 採取滾動型(繪製左上右下和HIGHT約束)

  2. 乘坐的UIView它會像一個容器查看。(畫左上右下使用scrollView的約束())。

  3. 使您的視圖控制器1000px,以便您可以使您的scrollView更大,更容易watch.later你可以最大限度地減少它。

  4. 現在保持你的按鈕在裏面。 請記住,,每個按鈕將有頂級主導寬度,高度和尾隨如有必要。寬度&高度對於scrollView非常重要,因爲它有多大取決於它。

值得一千字的圖片。

這裏是我的層次

enter image description here

這裏是故事板佈局design.White背景基本上是containerView。

enter image description here

這裏是output.I給點顏色爲更好地理解。

enter image description here

+0

我已經試過你提到的一切,它不起作用。 –

+0

我想你錯過了那些爲什麼它不起作用。告訴我你的故事板佈局 –

+0

我已在評論中添加了GIT鏈接。 –