UIPageViewController 在我的 UIImage 底部创建一个边框以及如何摆脱它
Posted
技术标签:
【中文标题】UIPageViewController 在我的 UIImage 底部创建一个边框以及如何摆脱它【英文标题】:UIPageViewController Creating a Border at the Bottom of my UIImage and how to get rid of it 【发布时间】:2014-03-26 10:51:02 【问题描述】:我对 UIPageViewControllers 比较陌生,刚刚为我的应用程序“演练”实现了它。
问题是,我正在显示的每张图片的底部和侧面都有一个带有pageViewIndicators
的边框,因此,图片不会全屏显示并且看起来是捆绑在一起的。
我在这里附上一些图片以供参考:
我只是想摆脱这个边框,只是让pageIndicators
在背景中覆盖全屏图像。此外,当滑动到下一个屏幕时,我不希望图像之间出现黑色边框(根据第二个屏幕截图)。
这里有一些代码。我有一个 WalkthroughViewController
文件,其中包含对正在创建的图像的引用:
- (void)viewDidLoad
[super viewDidLoad];
[self.view setBackgroundColor:[UIColor clearColor]];
CGRect insetFrame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
_imageView = [[UIImageView alloc] initWithFrame:insetFrame];
_imageView.backgroundColor = [UIColor clearColor];
[_imageView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
[_imageView setImage:[UIImage imageNamed:_model.imageName]];
[[self view] addSubview:_imageView];
在我的PageViewController's
viewDidLoad
,我有:
- (void)viewDidLoad
[super viewDidLoad];
[[self view] setBackgroundColor:[UIColor blackColor]];
_modelArray = [NSMutableArray arrayWithObjects:[[ImageModel alloc] initWithImageName:@"TimelineTut.png"],
[[ImageModel alloc] initWithImageName:@"Tut 1.png"],
[[ImageModel alloc] initWithImageName:@"Tut 2.png"],
[[ImageModel alloc] initWithImageName:@"newtut3.png"],
[[ImageModel alloc] initWithImageName:@"tut 4.png"],
nil];
_pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:[NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:50.0f] forKey:UIPageViewControllerOptionInterPageSpacingKey]];
_pageViewController.delegate = self;
_pageViewController.dataSource = self;
WalkthroughViewController *imageViewController = [[WalkthroughViewController alloc] init];
imageViewController.model = [_modelArray objectAtIndex:0];
NSArray *viewControllers = [NSArray arrayWithObject:imageViewController];
[self.pageViewController setViewControllers:viewControllers
direction:UIPageViewControllerNavigationDirectionForward
animated:NO
completion:nil];
[self addChildViewController:_pageViewController];
[self.view addSubview:_pageViewController.view];
[_pageViewController didMoveToParentViewController:self];
//CGRect pageViewRect = self.view.bounds;
// pageViewRect = CGRectInset(pageViewRect, 0.0, 0.0);
//self.pageViewController.view.frame = pageViewRect;
上面的最后三行被注释掉了,但是如果我取消注释它们并保留值,它保持不变。但是,如果我将 0.0 更改为 40.0 之类的值,它看起来会拉长,这是可以理解的。
我尝试在WalkthroughViewController
中将ImageRatio
设置为AspectFill
、Fit
、ScaleToFill
等,但这并没有消除边界。
视图控制器完全是在代码中创建的,而不是在故事板中创建的,它几乎看起来像这个问题 (Putting a bar on the bottom of the UIPageViewController) 但我不想要边框而且我不认为我正在嵌入容器中?
更新:
通过在这行代码中改变这里的值:
_pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:[NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:50.0f] forKey:UIPageViewControllerOptionInterPageSpacingKey]];
从 50 到 0,我已经去掉了图像侧面的空间。但是底部的边距仍然存在。
我如何摆脱黑色边框,但将 pageViewIndicators 保留为图像的叠加层,从而使图像全屏显示并且不会因为边框而被压扁?
对此的任何指导将不胜感激。
【问题讨论】:
【参考方案1】:我设法通过在此问题How to remove the bottom gap of UIPageViewController 中选择的答案克服了这个实现
基本前提是确保将 PageViewController 的视图扩展 15 倍,这会将页面指示器移到底部。幸运的是,我的背景是黑色的(问题中的紫色图像仅供参考)并且图像看起来没有被压扁。虽然这不是一个理想的解决方案,但它现在可以完成工作。
【讨论】:
以上是关于UIPageViewController 在我的 UIImage 底部创建一个边框以及如何摆脱它的主要内容,如果未能解决你的问题,请参考以下文章
在几秒钟内重新加载 UiPageViewController
如何在 UIPageViewController 上禁用多点触控?
ViewDidLoad 不断在 UIPageViewController 上被调用