it-swarm.com.ru

iOS 11 Swift 4 iPhone X Безопасная зона Поддержка полноэкранного ScrollView

В настоящее время у меня есть настройки макета в виде полноэкранного прокрутки на одном контроллере представления, в котором я добавляю другие контроллеры представления в качестве вложенных представлений для создания постраничного эффекта. На обычных экранах iphone работает красиво. Однако при работе на iPhone X все кажется смещенным по центру, и я могу просматривать страницу несколько раз на одной странице. 

Вот мой код для настройки прокрутки 

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

У меня есть безопасное место на доске объявлений. 

 enter image description here

 enter image description here

 enter image description here

 enter image description here

13
user6520705

Вы можете сделать это с помощью safe area layout guide и получить дополнительную информацию, используя ссылку:

https://medium.com/rosberryapps/ios-safe-area-ca10e919526f

Вы также можете сделать это без безопасной области: я подготовил для вас демонстрацию, и в этой демонстрации у нас есть три контроллера представления, добавленных в представление прокрутки, и представление прокрутки добавлено на другом контроллере представления (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=0

Я протестировал демо в iPhoneX и iPhone6 и iPhone8+

Скриншоты ниже:

 enter image description here

 enter image description here

 enter image description here

 enter image description here

4
Jogendar Choudhary

Вы можете решить это легко.

1 enter image description here

2 . enter image description here

2
Kamani Jasmin

установите ограничение с помощью Safe Area Здесь вы можете оформить заказ ...

https://stackoverflow.com/a/45334411/6898523

https://developer.Apple.com/ios/human-interface-guidelines/overview/iphone-x/

Как только вы установите ограничение просмотра прокрутки в безопасную область ... выберите сцену viewController и Снимите флажок свойства Adjust scroll view insets.

 enter image description here

Обновлено

if #available(iOS 11.0, *) {
   fullScreenScrollView?.contentInsetAdjustmentBehavior = .always
 }
1
MAhipal Singh