我需要創建一個視圖,其中包含滾動視圖和頁面控件,並在滾動視圖中放置7個視圖。 要在滾動視圖內部佈置子視圖,我使用純自動佈局方法,即here。3.5英寸屏幕上的視圖高度爲568
所以我有我的控制器與XIB文件(我不使用故事板這裏),很簡單:它是一個UIScrollView
和UIPageControl
與所有約束設置。
而且我有一個UIView
子Slide
其中有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.
我試圖解決它已經第二天了,仍然沒有什麼作品。我知道如果不使用自動佈局和界面生成器,實現起來可能更簡單,但我需要用這些來實現。
這與您的問題沒有任何關係,但看起來您正在重新創建['UIPageViewController'](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIPageViewControllerClassReferenceClassRef/)。在你再度過一天之前,你應該檢查那門課。 – 2014-12-06 09:45:30
你如何定義內容?請注意,使用自動佈局內容大小是從約束定義的! – Sulthan 2014-12-06 09:56:47
@MatthiasBauch請發表您的評論作爲答案。我應該經常在每個iOS版本中檢查新東西。 – Randex 2014-12-06 16:46:47