iPad和iPhone上的UIScrollView分页布局

胡伟

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

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

  1. 我在情节提要中创建了3个视图控制器,如下所示:

在此处输入图片说明

ViewControllerUIScrollView

AViewControllerUILabel在center(“ Good morning...”)中包含一个

BViewControllerUILabel在center(“ Good night...”)中包含一个

  1. UILabels的约束是:

在此处输入图片说明

  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中的工作方式如下:(从绿色滑动到红色)

在此处输入图片说明

但对于iPad:

在此处输入图片说明

标签未居中!!

如果我选择View as iPad ...,那么iPhone版布局不正确。

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

在此处输入图片说明

谢谢你的帮助。

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

莫特

嵌入式视图控制器视图translatesAutoresizingMaskIntoConstraints = true默认情况下会引入虚假约束:AutoresizingMask Constraints将其设置为false不会让您仅手动设置框架,因此您必须编写完整的布局。它稍微冗长一些,但是自动布局将适用于嵌入式视图控制器,并且您还将获得旋转支持:

@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])
}

func addContentView(_ viewControllers: [UIViewController]) {
    var previousController: UIViewController? = nil
    viewControllers.forEach {
        addChildViewController($0)
        $0.view.translatesAutoresizingMaskIntoConstraints = false
        scrollView.addSubview($0.view)

        $0.view.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
        $0.view.heightAnchor.constraint(equalTo: scrollView.heightAnchor).isActive = true
        if let trailing = previousController?.view.trailingAnchor {
            $0.view.leadingAnchor.constraint(equalTo: trailing).isActive = true
        } else {
            $0.view.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
        }
        $0.view.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
        $0.view.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
        didMove(toParentViewController: self)
        previousController = $0
    }
    previousController?.view.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
}

滚动视图对于所有设备都可以正常工作,而与Xcode View设置无关: enter image description here enter image description here

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 iPhone 和 iPad 上支持不同的方向?

iPhone和iPad在同一Storyboard中的不同布局

如何为iPhone和iPad设置不同的布局(快速)

iPhone 和 iPad 之间的 Swift 4 居中布局

具有自动布局功能的UITableViewCell在iPhone和iPad上的左边距有所不同

如何在iPhone / iPad的UILabel上设置粗体和斜体?

在 iphone 和 ipad(Safari 浏览器)上嵌入 iframe

Iphone和Ipad上CorePlot库的不同行为

背景图像在iPad和iPhone上移动

UIScrollView和自动布局指南

自动布局是否意味着我不需要单独的iPhone和iPad键盘?

ipad/iphone 上的 Flexbox 问题

iPad上的UIScrollView崩溃应用程序

视频录制在iPhone上失败,但在iPod Touch和iPad上可用

iOS8自适应UI:iPad上的列和iPhone上的行

Xcode游戏声音可以在Sim和iPad上播放,但不能在iPhone 6上播放

SwiftUI:TabView 和 NavigationView 在 iPhone 上运行良好,但在 iPad 上不运行?

从UIScrollview删除内容和框架布局指南

UIScrollView和自动布局不起作用

ios:uiscrollview和uiview自动布局

iPhone X上UIScrollView左侧的多余空白

iPad和iPhone上CSS背景图像的大小调整不正确。

iCloud 同步在 iPhone 和 Mac 上有效,但在 iPad 上无效

视频标签无法在iPhone Safari或Chrome和某些iPad上使用

iOS Swift在iPad和iPhone上运行时,相同的代码会导致不同的日期格式

仅在设备(iphone和ipad)上发生错误-链接器命令失败

(iPhone和iPad)在外部输入字段上单击时,永远不要失去焦点-HTML / Javascript

在iPhone和iPad上同时运行的应用程序是否重要?

iPad和iPhone上没有显示背景图片