3.5英寸屏幕上的视图高度为568

时间:2014-12-06 09:34:24

标签: ios iphone swift uiscrollview autolayout

我需要创建一个包含滚动视图和页面控件的视图,并在滚动视图中放置7个视图。 要在滚动视图中布置子视图,我使用纯自动布局方法,即here

所以我的控制器带有XIB文件(我这里不使用故事板)非常简单:它是一个UIScrollViewUIPageControl,并设置了所有约束。

我有一个UIView子类Slide的XIB,它有2 UIImageViews和1 UILabel,还有一些约束。

要向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。

我正在尝试第二天解决它,但仍然无效。我知道在不使用自动布局和界面生成器的情况下实现这可能要简单得多,但我需要用这些来实现。

1 个答案:

答案 0 :(得分:0)

我使用UIPageViewController而不是所有这些混乱,它运作得很好。