sn3*_*3ek 59 storyboard uipagecontrol ios uipageviewcontroller
关于如何使用UIPageViewController实现应用程序的AppCoda本教程,我想在页面顶部而不是底部使用自定义页面控制元素.
当我只是将页面控制元素放在将要显示的单个视图的顶部时,逻辑结果是控件元素滚动,页面视图远离屏幕.
如何将控制元素置于视图顶部以使页面视图全屏(如图像),以便用户可以在固定控件元素下看到视图?
我附上了一个示例屏幕截图 - 来自AppCoda和Path的信用:
Eri*_* F. 53
我没有让代表对这个产生的答案发表评论,但我真的很喜欢它.我改进了代码并将其转换为swift以用于UIPageViewController的以下子类:
class UIPageViewControllerWithOverlayIndicator: UIPageViewController {
override func viewDidLayoutSubviews() {
for subView in self.view.subviews as! [UIView] {
if subView is UIScrollView {
subView.frame = self.view.bounds
} else if subView is UIPageControl {
self.view.bringSubviewToFront(subView)
}
}
super.viewDidLayoutSubviews()
}
}
Run Code Online (Sandbox Code Playgroud)
干净,效果很好.无需维护任何内容,只需将您的页面视图控制器作为故事板中此类的实例,或者使您的自定义页面视图控制器类继承此类.
sn3*_*3ek 51
经过进一步的调查和搜索,我找到了一个解决方案,也在stackoverflow上.
关键是要发送到自定义UIPageControl
元素的以下消息:
[self.view bringSubviewToFront:self.pageControl];
Run Code Online (Sandbox Code Playgroud)
使用箭头在视图控制器的UIPageControl
顶部添加元素RootViewController
.
IBOutlet
在你的中创建一个相关的元素ViewController.m
.
在该viewDidLoad
方法中,您应该添加以下代码作为添加所有子视图后调用的最后一个方法.
[self.view bringSubviewToFront:self.pageControl];
Run Code Online (Sandbox Code Playgroud)
要根据当前内容视图的pageIndex分配当前页面,可以将以下内容添加到UIPageViewControllerDataSource
方法中:
- (UIPageViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
// ...
index--;
[self.pageControl setCurrentPage:index];
return [self viewControllerAtIndex:index];
}
- (UIPageViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
// ...
index++;
[self.pageControl setCurrentPage:index];
// ...
return [self viewControllerAtIndex:index];
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*dad 27
sn3ek你的回答让我大部分都在那里.我没有使用这些viewControllerCreation
方法设置当前页面.
我让我ViewController also
的代表UIPageViewController
.然后我在那个方法中设置PageControl
's' CurrentPage
.使用pageIndex
维护我ContentViewController
在原始文章中提到.
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
APPChildViewController *currentViewController = pageViewController.viewControllers[0];
[self.pageControl setCurrentPage:currentViewController.pageIndex];
}
Run Code Online (Sandbox Code Playgroud)
别忘了把它添加到 viewDidLoad
self.pageViewController.delegate = self;
Run Code Online (Sandbox Code Playgroud)
要跟进PropellerHead的注释,ViewController
将使用表单的界面
@interface ViewController : UIViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51817 次 |
最近记录: |