UIPageViewController에서 점 숨기기
아주 간단한 일을하고 싶습니다. 모든 점과 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을 반환합니다. kludge이지만 작동하는 것처럼 보입니다 (iOS SDK 7.0).
"더 깨끗한"방법은 페이지가 1 개 뿐인 UIPageController에 대해 런타임에 메서드를 제거하는 것이지만 이것은 멋진 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
}
Lee가 지적했듯이 presentationCountForPageViewController 및 presentationCountForPageViewController 메서드를 구현하지 않으면 음성 해설 중에 페이지 번호 (1/5, 2/5 등)를 읽지 못하는 접근성 문제가 발생합니다. 접근성을 지원하는 솔루션은 다음과 같습니다.
// Swift
let proxy = UIPageControl.appearance()
proxy.isHidden = true
// Objective-C
UIPageControl *proxy = [UIPageControl appearance];
[proxy setHidden:YES];
이것은 데이터 소스와 그 프리젠 테이션 사이의 명확한 분리를 유지하는 추가적인 이점이 있습니다.
UPDATE: This is unfortunately not a perfect solution since it hides the control but doesn't remove it (there remains an empty space the same height of the hidden control). I haven't yet been able to find a way to configure the existing control to fix this issue.
ReferenceURL : https://stackoverflow.com/questions/20748897/hide-dots-from-uipageviewcontroller
'development' 카테고리의 다른 글
UICollectionView : 스크롤이 중지되었을 때 감지하는 방법 (0) | 2020.12.31 |
---|---|
목록에서 중복을 제거하는 방법은 무엇입니까? (0) | 2020.12.31 |
특정 순서로 PHPUnit 테스트 실행 (0) | 2020.12.31 |
내부에 2 색 입자가있는 수정 구슬을 그리는 방법 (0) | 2020.12.31 |
Swift : 레이블 또는 textView에 HTML 데이터 표시 (0) | 2020.12.31 |