現在、1つのView Controllerでフルスクリーンスクロールビューとしてレイアウトデザインをセットアップしており、そこに他のView Controllerをサブビューとして追加してページ効果を作成しています。通常のiPhone画面では、きれいに機能します。ただし、iPhone Xで実行しているときは、物事が中心から外れているように見え、1ページで複数回ページングできます。
以下は、スクロールビューのセットアップ用の私のコードです
self.scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.size.height * 3)
if #available(iOS 11.0, *) {
self.scrollView.contentInsetAdjustmentBehavior = .never
} else {
// Fallback on earlier versions
}
let V1 = self.storyboard?.instantiateViewController(withIdentifier: "S1") as! UINavigationController!
self.addChildViewController(V1!)
self.scrollView.addSubview(V1!.view)
V1?.didMove(toParentViewController: self)
V1?.view.frame = scrollView.bounds
myViewsArray.append(V1!)
let V2 = self.storyboard?.instantiateViewController(withIdentifier: "S2") as UIViewController!
self.addChildViewController(V2!)
self.scrollView.addSubview(V2!.view)
V2?.didMove(toParentViewController: self)
V2?.view.frame = scrollView.bounds
myViewsArray.append(V2!)
var V1Frame: CGRect = V1!.view.frame
V1Frame.Origin.y = 2*self.view.frame.height
V1?.view.frame = V1Frame
var V2Frame: CGRect = V2!.view.frame
V2Frame.Origin.y = (self.view.frame.height)
V2?.view.frame = V2Frame
V2!.view.alpha = 1
ストーリーボードには安全な場所があります。
safe area layout guide
を使用してこれを実行し、リンクを使用して詳細情報を取得できます。
安全なエリアなしでもこれを行うことができます:私はあなたのためにデモを準備しました、このデモでは、スクロールビューに追加された3つのView Controllerがあり、スクロールビューは別のView Controllerに追加されます(ContainerViewController
)
ContainerViewController
:
import UIKit
class ContainerViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let V1 = self.storyboard?.instantiateViewController(withIdentifier: "first")
self.addChildViewController(V1!)
self.scrollView.addSubview(V1!.view)
V1?.didMove(toParentViewController: self)
V1?.view.frame = scrollView.bounds
let V2 = self.storyboard?.instantiateViewController(withIdentifier: "second")
self.addChildViewController(V2!)
self.scrollView.addSubview(V2!.view)
V2?.didMove(toParentViewController: self)
V2?.view.frame = scrollView.bounds
let V3 = self.storyboard?.instantiateViewController(withIdentifier: "third")
self.addChildViewController(V3!)
self.scrollView.addSubview(V3!.view)
V3?.didMove(toParentViewController: self)
V3?.view.frame = scrollView.bounds
var V1Frame: CGRect = V1!.view.frame
V1Frame.Origin.y = 0
V1?.view.frame = V1Frame
var V2Frame: CGRect = V2!.view.frame
V2Frame.Origin.y = (self.view.frame.height)
V2?.view.frame = V2Frame
var V3Frame: CGRect = V3!.view.frame
V3Frame.Origin.y = (self.view.frame.height)*2
V3?.view.frame = V3Frame
}
override func viewDidLayoutSubviews() {
scrollView.contentSize = CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height*3)
}
}
注:上部および下部の制約を安全な領域から削除し、
SuperView
(スクロールビュー、InnerView(FirstVC、SecondVC、ThirdVC)の場合)から追加します `
デモプロジェクトのすべての機能と制約を確認できます。ダウンロードURL: https://www.dropbox.com/s/4ovfqmrtwt2i8yi/StackOverflow.zip?dl=
_iPhoneX
およびiPhone6
およびiPhone8+
でデモをテストしました
スクリーンショットは次のとおりです。
セーフエリアを使用して制約を設定するここでチェックアウトできます...
https://stackoverflow.com/a/45334411/689852
https://developer.Apple.com/ios/human-interface-guidelines/overview/iphone-x/
Scrollview制約を安全な領域に設定したら、viewControllerシーンを選択し、Adjust scroll view insets
プロパティ。
更新済み
if #available(iOS 11.0, *) {
fullScreenScrollView?.contentInsetAdjustmentBehavior = .always
}