web-dev-qa-db-ja.com

Swift / iOS8:ページコントロールインジケーターが表示されないのはなぜですか?

私は、ユーザーがスクロールできる小さな範囲のフルスクリーン画像をアプリが表示する、単純なギャラリービューコントローラーを実装しています。正しいデータソース関数を実装すれば、ページコントロールインジケーターを自動的に表示するはずだと思っていたUIPageViewControllerを使用しています。しかし、私はまだどの指標も見ることができません。

私のメインGalleryViewController

class GalleryViewController: UIViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pageController: UIPageViewController?
var pageContent = NSArray()

override func viewDidLoad() {
super.viewDidLoad()
.... some code to load images into the pageContent array ....

pageController = UIPageViewController(transitionStyle:.Scroll, navigationOrientation:.Horizontal,options:nil) 
pageController?.delegate = self
pageController?.dataSource = self

... some more standard code to add the page controller to self.view etc.

var pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.lightGray()
pageControl.currentPageIndicatorTintColor = UIColor.whiteColor()
pageControl.backgroundColor = UIColor.blackColor()

pageController!.didMoveToParentViewController(self)
}

func viewControllerAtIndex(index:Int) -> ContentViewController? {
....
}

2つの必須プロトコルメソッドviewControllerBeforeViewControllerとviewControllerAfterController、およびページングに必要な2つのメソッド、presentationCountForPagesViewControllerとpresentationIndexForPageViewControllerを実装しました。

私のContentViewControllerには、画面全体を満たすUIImageViewがあります。ただし、画面の下部でサイズを小さくしても、ページインジケーターライトが表示されません。ここで何か見逃しましたか?十分な情報を提供していない場合はお知らせください。私は5年以上前にObjective-Cでコーディングした私の古いアプリを書き直そうとしてきました-完全にSwiftで大幅に変更されており、混乱しています。ありがとう!

13
Pompey Casmilus

here から取得:

UIPageControlを表示するには、2つのオプションのデータソースメソッドを実装する必要があります。 presentationCountForPageViewControllerのページの総数と、presentationIndexForPageViewControllerの最初に選択されたインデックスを返すだけです。

func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
    return pageContent.count
}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
    return 0
}
25
Zell B.

Swift 3 +バージョンZell B。の答えを使用しないのはなぜですか

    func presentationCount(for pageViewController: UIPageViewController) -> Int {
        return self.providerItemList?.providerItems?.count ?? 0
    }

    func presentationIndex(for pageViewController: UIPageViewController) -> Int {
        return 0
    }
21

UIPageControlの色を変更しても表示されない場合があります。 UIPageControllerがUITabBarController内にある場合、TabBarはUIPageControlをカバーします。それを見つける最良の方法は、オプションDebug-> View Debubging-> CaptureViewHierarchyを使用することです。次に、左下のフィルターフィールドに「pageControl」と入力します。ナビゲーターでクリックすると、画面に表示されます(スクリーンショットを見てください)。

enter image description here

次のように位置を変更できます。

let controlHeight: CGFloat = 50
    let bottomSpace: CGFloat = 20
    let yPosition = view.frame.size.height - (controlHeight + bottomSpace)
    let fullScreenWidth = view.frame.size.width
    let frame = CGRect(x: 0, y: yPosition, width: fullScreenWidth, height: controlHeight)

    pageControl.frame = frame
11
milczi

これらの回答の多くでは回答が豊富に表示されますが、これらのメソッドがヒットする前にUIPageViewControllerを 'Scroll'に設定する必要があることを明確にしたいだけです。

3
The Senator

ドットは白または半透明の白です。背景が白ではないことを確認するか、ドットの色を変更します。

0
timeSmith

私の間違いは、presentationCount()デリゲートメソッドで、ページビューコントローラーの実際のコンテンツページよりも多くのカウント値を設定することでした。

0
Nupur Sharma