UIPageViewController UIImage 不显示全屏
UIPageViewController UIImage not showing full screen
我正在制作一个选项卡视图控制器应用程序。对于第一个选项卡,我有一个滚动浏览图片的 UIPageViewController。一切正常,除了图片没有全屏显示。我为图像视图设置了约束以覆盖整个视图控制器,但是当它加载到页面视图中时,它并没有一直覆盖到底部。图像被滚动点指示器截断,然后变成白色。
我敢肯定这很简单,但是有没有一种方法可以让图像像我设置的约束一样覆盖整个屏幕?
该页面上有一个非常简单的解决此问题的方法:http://tunesoftware.com/?p=3363
这是通过重写 UIPageViewController 的 viewDidLayoutSubviews 方法完成的,基本上做了两件事:
- 增加 UIScrollView(内容)在 UIPageViewController 中的边界,方法是将其框架设置为页面控制器视图的边界
- 将 UIPageControl 元素(点)移动到视图层次结构的前面,使其位于内容前面
这是他提供的代码(以防 link 被破坏):
import UIKit
class TSPageViewController: UIPageViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var subViews: NSArray = view.subviews
var scrollView: UIScrollView? = nil
var pageControl: UIPageControl? = nil
for view in subViews {
if view.isKindOfClass(UIScrollView) {
scrollView = view as? UIScrollView
}
else if view.isKindOfClass(UIPageControl) {
pageControl = view as? UIPageControl
}
}
if (scrollView != nil && pageControl != nil) {
scrollView?.frame = view.bounds
view.bringSubviewToFront(pageControl!)
}
}
}
在那之后你要做的就是:
- 如果您在情节提要中设置了页面控制器,则只需转到身份检查器窗格并将其 class 更改为 TSPageViewController
- 如果您在代码中设置您的页面控制器,那么只要确保您为它定义的 class 继承了 TSPageViewController class.
这是 Objective-C 版本。新建 class(2 个文件):
(1) BasePageViewController.h 扩展 UIPageViewController
#import <UIKit/UIKit.h>
@interface BasePageViewController : UIPageViewController
@end
(2) BasePageViewController.m 包含 viewDidLayoutSubviews
覆盖
#import "BasePageViewController.h"
@implementation BasePageViewController
- (void) viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
UIScrollView *scrollView = nil;
UIPageControl *pageControl = nil;
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UIScrollView class]])
{
scrollView = (UIScrollView *)view;
}else if([view isKindOfClass:[UIPageControl class]])
{
pageControl = (UIPageControl *)view;
}
}
if(scrollView != nil && pageControl!=nil)
{
scrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view bringSubviewToFront:pageControl];
}
}
@end
我正在制作一个选项卡视图控制器应用程序。对于第一个选项卡,我有一个滚动浏览图片的 UIPageViewController。一切正常,除了图片没有全屏显示。我为图像视图设置了约束以覆盖整个视图控制器,但是当它加载到页面视图中时,它并没有一直覆盖到底部。图像被滚动点指示器截断,然后变成白色。
我敢肯定这很简单,但是有没有一种方法可以让图像像我设置的约束一样覆盖整个屏幕?
该页面上有一个非常简单的解决此问题的方法:http://tunesoftware.com/?p=3363
这是通过重写 UIPageViewController 的 viewDidLayoutSubviews 方法完成的,基本上做了两件事:
- 增加 UIScrollView(内容)在 UIPageViewController 中的边界,方法是将其框架设置为页面控制器视图的边界
- 将 UIPageControl 元素(点)移动到视图层次结构的前面,使其位于内容前面
这是他提供的代码(以防 link 被破坏):
import UIKit
class TSPageViewController: UIPageViewController {
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
var subViews: NSArray = view.subviews
var scrollView: UIScrollView? = nil
var pageControl: UIPageControl? = nil
for view in subViews {
if view.isKindOfClass(UIScrollView) {
scrollView = view as? UIScrollView
}
else if view.isKindOfClass(UIPageControl) {
pageControl = view as? UIPageControl
}
}
if (scrollView != nil && pageControl != nil) {
scrollView?.frame = view.bounds
view.bringSubviewToFront(pageControl!)
}
}
}
在那之后你要做的就是:
- 如果您在情节提要中设置了页面控制器,则只需转到身份检查器窗格并将其 class 更改为 TSPageViewController
- 如果您在代码中设置您的页面控制器,那么只要确保您为它定义的 class 继承了 TSPageViewController class.
这是 Objective-C 版本。新建 class(2 个文件):
(1) BasePageViewController.h 扩展 UIPageViewController
#import <UIKit/UIKit.h>
@interface BasePageViewController : UIPageViewController
@end
(2) BasePageViewController.m 包含 viewDidLayoutSubviews
覆盖
#import "BasePageViewController.h"
@implementation BasePageViewController
- (void) viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
UIScrollView *scrollView = nil;
UIPageControl *pageControl = nil;
for(UIView *view in self.view.subviews)
{
if([view isKindOfClass:[UIScrollView class]])
{
scrollView = (UIScrollView *)view;
}else if([view isKindOfClass:[UIPageControl class]])
{
pageControl = (UIPageControl *)view;
}
}
if(scrollView != nil && pageControl!=nil)
{
scrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view bringSubviewToFront:pageControl];
}
}
@end