私は、ユーザーがスクロールできる小さな範囲のフルスクリーン画像をアプリが表示する、単純なギャラリービューコントローラーを実装しています。正しいデータソース関数を実装すれば、ページコントロールインジケーターを自動的に表示するはずだと思っていた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で大幅に変更されており、混乱しています。ありがとう!
here から取得:
UIPageControlを表示するには、2つのオプションのデータソースメソッドを実装する必要があります。 presentationCountForPageViewControllerのページの総数と、presentationIndexForPageViewControllerの最初に選択されたインデックスを返すだけです。
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return pageContent.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return 0
}
Swift 3 +バージョンZell B。の答えを使用しないのはなぜですか
func presentationCount(for pageViewController: UIPageViewController) -> Int {
return self.providerItemList?.providerItems?.count ?? 0
}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
UIPageControlの色を変更しても表示されない場合があります。 UIPageControllerがUITabBarController内にある場合、TabBarはUIPageControlをカバーします。それを見つける最良の方法は、オプションDebug-> View Debubging-> CaptureViewHierarchyを使用することです。次に、左下のフィルターフィールドに「pageControl」と入力します。ナビゲーターでクリックすると、画面に表示されます(スクリーンショットを見てください)。
次のように位置を変更できます。
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
これらの回答の多くでは回答が豊富に表示されますが、これらのメソッドがヒットする前にUIPageViewControllerを 'Scroll'に設定する必要があることを明確にしたいだけです。
ドットは白または半透明の白です。背景が白ではないことを確認するか、ドットの色を変更します。
私の間違いは、presentationCount()デリゲートメソッドで、ページビューコントローラーの実際のコンテンツページよりも多くのカウント値を設定することでした。