2014-12-06 74 views
0

我需要創建一個視圖,其中包含滾動視圖和頁面控件,並在滾動視圖中放置7個視圖。 要在滾動視圖內部佈置子視圖,我使用純自動佈局方法,即here3.5英寸屏幕上的視圖高度爲568

所以我有我的控制器與XIB文件(我不使用故事板這裏),很簡單:它是一個UIScrollViewUIPageControl與所有約束設置。

而且我有一個UIViewSlide其中有2 UIImageViews和1 UILabel一個XIB,還有還有一些制約因素。

要一些看法添加到UIScrollView我使用此代碼在viewDidLayoutSubviews()

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    scrollView.setTranslatesAutoresizingMaskIntoConstraints(false) 
    var pSlide: Slide? 
    for var i = 0; i < 7; i++ { 
     var slide = Slide(frame: self.view.bounds, imageName: "slide-\(i+1)-bg", text: NSLocalizedString("slides_\(i+1)", comment: "")) 
     slide.setTranslatesAutoresizingMaskIntoConstraints(false) 
     scrollView.addSubview(slide) 


     var dict: [NSObject : AnyObject] = ["currentSlide" : slide] 
     if let previousSlide = pSlide { 
      dict["previousSlide"] = previousSlide 
      let constraintsHorizontal = NSLayoutConstraint.constraintsWithVisualFormat("H:[previousSlide][currentSlide]", options: nil, metrics: nil, views: dict) 
      scrollView.addConstraints(constraintsHorizontal) 

      let constraintsVertical = NSLayoutConstraint.constraintsWithVisualFormat("V:|[currentSlide]|", options: nil, metrics: nil, views: dict) 
      scrollView.addConstraints(constraintsVertical) 
     } else { 
      let constraintsVertical = NSLayoutConstraint.constraintsWithVisualFormat("V:|[currentSlide]|", options: nil, metrics: nil, views: dict) 
      scrollView.addConstraints(constraintsVertical) 

      let constraintsLeft = NSLayoutConstraint.constraintsWithVisualFormat("H:|[currentSlide]", options: nil, metrics: nil, views: dict) 
      scrollView.addConstraints(constraintsLeft) 
     } 

     if i == 6 { 
      let constraintsRight = NSLayoutConstraint.constraintsWithVisualFormat("H:[currentSlide]|", options: nil, metrics: nil, views: dict) 
      scrollView.addConstraints(constraintsRight) 
     } 

     pSlide = slide 
    } 

    pageControl.numberOfPages = numberOfSlides 
    view.layoutSubviews() 
} 

在這段代碼創建一個Slide實例,並設置所有必要的約束,根據純粹的自動佈局方法。

init()Slide類的方法是這樣的:

init(frame: CGRect, imageName: String, text: String) { 
    super.init(frame: frame) 
    NSBundle.mainBundle().loadNibNamed("Slide", owner: self, options: nil) 
    self.addSubview(self.view) 

    self.view.frame = frame 
    self.layoutIfNeeded() 

    println("Frame is \(frame); view.frame is \(self.view.frame)") 

    backgroundImage.image = UIImage(named: imageName) 
    textLabel.text = text 

} 

我希望

self.view.frame = frame 
self.layoutIfNeeded() 

會幫助我,但沒有。問題是,在3.5英寸的屏幕上,我所有的UIScrollView子視圖的高度都是568,這是4英寸顯示屏的正常高度,但不是3.5英寸。

我正在檢查viewDidAppear(animated:)方法的高度。但是,在init()方法Slide類的高度似乎是好的 - 480.

我試圖解決它已經第二天了,仍然沒有什麼作品。我知道如果不使用自動佈局和界面生成器,實現起來可能更簡單,但我需要用這些來實現。

+2

這與您的問題沒有任何關係,但看起來您正在重新創建['UIPageViewController'](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/)。在你再度過一天之前,你應該檢查那門課。 – 2014-12-06 09:45:30

+0

你如何定義內容?請注意,使用自動佈局內容大小是從約束定義的! – Sulthan 2014-12-06 09:56:47

+0

@MatthiasBauch請發表您的評論作爲答案。我應該經常在每個iOS版本中檢查新東西。 – Randex 2014-12-06 16:46:47

回答

0

我使用UIPageViewController而不是所有這些混亂,它工作得很好。

相關問題