8

私のアプリケーションには、約10ページ(ドット)で完全に見栄えのするUIPageControlがありますが、ユーザーがさまざまなビューを追加できるため、ドットの数は30になる可能性があります。

これが発生すると、ドットが画面の端から消えてしまい、現在選択されているページが常に表示されるとは限らないため、すべてがひどく見えます。

ページコントロールを複数行にする方法、または現在表示されているページが画面から消えた瞬間にページコントロールを左または右にシフトする方法はありますか?

4

5 に答える 5

3

UIWebViewを含むUIScrollViewを使用するeBookアプリケーションを作成しました。この本は100ページを超えていたため、指摘された問題のためにUIPageControlはそれを処理できませんでした。最終的に、UIPageControlと同様に機能するが、多数のページを処理できるカスタムの「スライダー」タイプのビューを作成しました。それはあなたがする必要があることのほとんどです。UIPageコントロールは必要な数のページを処理できません...

于 2011-01-20T15:58:05.010 に答える
3

ページ/ドット比を計算し、float値として保存します。次に、現在のドット数を現在のページ/pagesPerDotとして計算します。ドットが動くのを見る前に数ページ進む必要があるかもしれませんが、それは非常にスケーラブルでうまく機能します。

于 2012-08-22T13:51:08.313 に答える
2

30個のアイテムがある水平コレクションビューの下にUIPageControlを実装する必要がありました。だから私はドットの数を固定してそれらのドットだけをスクロールすることでドットの数を減らすために何をしましたか?コードに従ってください:

@IBOutlet var pageControl: UIPageControl!
var collectionDataList = [String]
let dotsCount = 5

override func viewDidAppear(_ animated: Bool) {
    if collectionDataList.count < dotsCount {
        self.pageControl.numberOfPages = collectionDataList.count
    } else {
        self.pageControl.numberOfPages = dotsCount
    } 
}

func scrollViewDidScroll(_ scrollView: UIScrollView)
{
   let pageWidth = scrollView.frame.width
   self.currentPage = Int((scrollView.contentOffset.x + pageWidth / 2) / pageWidth)
   self.pageControl.currentPage = self.currentPage % dotsCount

}
于 2017-09-18T09:12:24.043 に答える
1

私の解決策は、ドットの最大数を設定し、ユーザーが最後に到達するまで最後のドットの前にドットを表示することです。現在のページ数が最大ドット数よりも大きい場合、ユーザーが最後に到達するまで、最後のページ数の前のページ数を表示します。

var maxDotCount = 8   //Global constant.

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        let pageWidth = collectionView.frame.size.width
        let currentPage = collectionView.contentOffset.x / pageWidth
        let pageControlsNumberOfPages = pageControl.numberOfPages - 1
        let dataSourceCount = CGFloat(dataSourceArr.count - 1)
        let maxDotCountReduced = CGFloat(maxDotCount - 1)

        if (dataSourceCount > maxDotCountReduced) {
            if (currentPage >= maxDotCountReduced) {
                if (currentPage == dataSourceCount) {
                    pageControl.currentPage = pageControlsNumberOfPages
                } else {
                    pageControl.currentPage = pageControlsNumberOfPages - 1
                }
                return
            }
        }
        pageControl.currentPage = Int(currentPage)
    }
于 2018-12-13T10:46:46.743 に答える
1

最大ページ数を20(ポートレートモードのiPhone 5S / SEに収まる最大数)に設定しました。20を超えるページを表示している場合は、ドットを同じ場所に保持しますが、ドットを作成します。赤。人々はそれが何を意味するのかを理解していると思います。私も画面に数字のページ番号があり、最初と最後のボタンもあります。人々は最初のページでドットが動くのを見ることにもっと興味を持っているように感じます。 ここに画像の説明を入力してください

于 2019-07-01T12:31:47.560 に答える