2017-03-23 11 views
0

ContainerView内にPageControllerを埋め込みました。 PageControllerに表示されるビューがPageControllerに合わせて縮尺されていないのはなぜですか? 「スケール・フィット」を達成するにはどうすればいいですか? (少なくともPageControllerで自身がContainerViewにそのサイズを適応させる)iOS/Swift 3:UIViewがUIPageController内で大きすぎます

私のクラスは、次のとおりです。

import UIKit 

class YellowController : UIViewController 

{ 

} 

class GreenController : UIViewController 
{ 

} 

//from a tutorial: 
class PageController : UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate 
{ 
// from stackoverflow to avoid the black box at the bottom of the pagecontroller 
override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    for view in self.view.subviews 
    { 
     if view is UIScrollView 
     { 
      view.frame = UIScreen.main.bounds 
     } 
     else 
     { 
      view.backgroundColor = UIColor.clear 
     } 
    } 
} 


lazy var VCArray: [UIViewController] = 
{ 
    return [self.VCInstance(name: "InfoPage"), 
      self.VCInstance(name: "FragePage"), 
      self.VCInstance(name: "AntwortPage") ] 
}() 

private func VCInstance (name: String) -> UIViewController 
{ 
    let VCC = UIStoryboard(name: "Lerneinheit", bundle: nil).instantiateViewController(withIdentifier: name) 

    return VCC 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.dataSource = self 
    self.delegate = self 
    if let InfoPage = VCArray.first 
    { 
     setViewControllers([InfoPage], direction: .forward, animated: true, completion: nil) 
    } 
} 


public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 
{ 
    guard let viewControllerIndex = VCArray.index(of: viewController) 
    else 
    { 
     return nil 
    } 

    if (viewControllerIndex<1) 
    { 
     return nil 
    } 

    return VCArray[viewControllerIndex - 1] 
} 
public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 
{ 
    guard let viewControllerIndex = VCArray.index(of: viewController) 
     else 
    { 
     return nil 
    } 

    if viewControllerIndex == VCArray.count-1 
    { 
     return nil 
    } 

    return VCArray[viewControllerIndex + 1] 
} 

public func presentationCount(for pageViewController: UIPageViewController) -> Int 
{ 
    return VCArray.count 
} 

public func presentationIndex(for pageViewController: UIPageViewController) -> Int 
{ 
    guard let firstViewController = viewControllers?.first, let firstViewControllerIndex = VCArray.index(of: firstViewController) 
    else 
    { 
     return 0 
    } 

    return firstViewControllerIndex 
} 

IB:PageControllerで合うように代わりにスケーリングされたのカットbeeingて黄色ビューWTH IB 結果: 黄色ビューのResult wth the yellow view beeing cut instead of scaled to fit the PageController 制約:

Constraints for the yellow view
+0

より多くのデータを提供する必要があります。 "Two Controller"には実際にラベルの中に埋め込まれたスクロールビューが含まれていますか? 自動レイアウトを正しく使用していますか? VCをUIPageにどのように「フィード」しますか? スニップコードを入力すると便利です – OhadM

+0

txtInfoはそのVC内でスクロール可能ですか?また、灰色の制約があるように見えますが、削除してください。 – OhadM

+0

はい、スクロール可能です。 – daviid

答えて

0

以下のコードは、それを削除し、冗長である:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    for view in self.view.subviews 
    { 
     if view is UIScrollView 
     { 
      view.frame = UIScreen.main.bounds 
     } 
     else 
     { 
      view.backgroundColor = UIColor.clear 
     } 
    } 
} 
関連する問題