とてもシンプルなことをしたいと思います。 UIPageViewControllerの下部にあるすべてのドットとバーを削除するだけです。
これがセットアップです:UIPageViewController * pageControllerを持つカスタムビューコントローラーがあります。次のように表示します。
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageController.dataSource = self;
[[self.pageController view] setFrame:[self.view bounds]];
BSItemPageViewController *initialViewController = [self viewControllerAtIndex:selectedIndex];
NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];
[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];
ドットを削除する方法についてのアイデアはありますか?
ページコントロールは、データソースが次のメソッドを実装している場合にのみ表示されます。
presentationCountForPageViewController:
presentationIndexForPageViewController:
これらの実装を単に削除すると、ページコントロールは表示されません。から データソースドキュメント :
「ページインジケーターのサポート」の両方のメソッドが実装され、ページビューコントローラーの遷移スタイルがUIPageViewControllerTransitionStyleScrollである場合、ページインジケーターが表示されます。
私の状況では、複数のUIPageViewControllers(-[UITableView didSelectRowAtIndexPath]から作成)があり、そのうちのいくつかには1ページしか含まれていません。 UITableViewの行ごとに異なるコントローラーを使用する代わりに、次のようにUIPageViewControllerデリゲートメソッドを実装しました。
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController {
return ([self numberOfPages] == 1 ? 0 : [self numberOfPages]);
}
UIPageViewControllerがドットを表示しないように思われるページが1ページしかない場合、これは0を返します。それは手ごわいですが、動作するようです(iOS SDK 7.0)。
「よりクリーンな」方法は、1ページしかないUIPageControllersの実行時にメソッドを削除することだと思いますが、これにはいくつかの豪華なobjCランタイム操作が含まれます。
このアプローチについてのコメントは?
実行時にこれらのドットを動的に非表示にする場合は、presentationIndexForPageViewControllerデリゲートから-1を返します。
func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
return yourPageVCs.count
}
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
return yourPageVCs.count > 1 ? 0 : -1
}
この場合、1ページ(片面)しかない場合、ドットは非表示になります。
上記の修正は、最初のページ数が固定されていても問題なく機能します。
ページを動的に増減させるにできる場合、問題を解決するためにさまざまなアプローチを試しました。
そこで、コンポーネント自体を手動で非表示にする以下のメソッドを使用しました。
func togglePageControl(pageCount: Int, threshold: Int = 1) {
var hidden = true
if pageCount > threshold {
hidden = false
}
for subView in self.view.subviews {
if subView is UIScrollView {
subView.frame = self.view.bounds
} else if subView is UIPageControl {
subView.isHidden = hidden
}
}
}
そして、これはから呼び出す必要があります
public func presentationCount(for pageViewController: UIPageViewController) -> Int {
togglePageControl(pageCount: pages.count)
// or togglePageControl(pageCount: pages.count, threshold: 5)
return pages.count
}