iPad和iPhone上的UIScrollView分页布局

时间:2018-04-13 09:32:37

标签: ios swift uiscrollview autolayout uicontainerview

我正在制作一个通用的演示xcode项目,UIScrollView包含两个页面,左右滚动来回移动。

我的问题是iPad和iPhone的布局不一样。

  1. 我在storyboard中创建了3个视图控制器,如下所示:
  2. enter image description here

    ViewControllerUIScrollView

    AViewController在中心包含UILabel(" Good morning...")。

    BViewController在中心包含UILabel(" Good night...")。

    1. UILabels的限制是:
    2. enter image description here

      1. 以下是ViewController的代码:

        class ViewController: UIViewController {
        
            @IBOutlet weak var scrollView: UIScrollView!
            override func viewDidLoad() {
                super.viewDidLoad()
                let story = UIStoryboard(name: "Main", bundle: nil)
                let vc1 = story.instantiateViewController(withIdentifier: "AViewController")
                let vc2 = story.instantiateViewController(withIdentifier: "BViewController")
                vc1.view.backgroundColor = UIColor.green
                vc2.view.backgroundColor = UIColor.red
                addContentView([vc1, vc2])
                scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width * 2, height: scrollView.frame.height)
            }
        
            func addContentView(_ viewControllers: [UIViewController]) {
                viewControllers.enumerated().forEach {
                    addChildViewController($1)
                    $1.view.frame = CGRect(x: UIScreen.main.bounds.width * CGFloat($0), y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
                    scrollView.addSubview($1.view)
                    didMove(toParentViewController: $1)
            }
        }
        

        }

      2. 如果我选择以iPhone 8查看,那么iPhone 8中的布局工作正常如下:(然后从绿色滑动到红色)

      3. enter image description here

        但对于iPad:

        enter image description here

        标签不居中!!

        如果我选择以iPad身份查看... ,那么对于iPhone来说,它的布局不正确。

        这是视图层次结构,很明显布局是正确的但是由于某种原因绿色视图大于屏幕尺寸并被红色视图覆盖。

        enter image description here

        感谢您的帮助。

        代码在这里:https://github.com/williamhqs/TestLayout

1 个答案:

答案 0 :(得分:1)

默认情况下,嵌入式视图控制器视图有[ID]=Forms![Main]![ProductsList].Form![SupplierDS].Form![ID] ,这会引入虚假约束: AutoresizingMask Constraints 将其设置为false将不允许您手动设置框架,因此您必须编写完整的布局。它稍微冗长一点,但autolayout将适用于嵌入式视图控制器,您也可以获得轮换支持:

translatesAutoresizingMaskIntoConstraints = true

无论Xcode View如何设置,滚动视图都可以按预期的方式运行所有设备: enter image description here enter image description here