【问题标题】:UIPageViewController UIImage not showing full screenUIPageViewController UIImage 不显示全屏
【发布时间】:2015-04-28 06:29:25
【问题描述】:

我正在制作一个标签视图控制器的应用程序。对于第一个选项卡,我有一个 UIPageViewController 滚动图片。一切正常,除了图片没有全屏显示。我为图像视图设置了约束以覆盖整个视图控制器,但是当它被加载到页面视图中时,它并没有一直覆盖到底部。图像被滚动的点指示器截断,然后变成白色。

我确信这很简单,但是有没有办法让图像像我设置的约束一样覆盖整个屏幕?

【问题讨论】:

  • 向我们展示你所追求的截图,然后解释它应该如何不同。
  • 在图片中,我希望图像一直向下到底部。相反,它会在点开始的地方停止。我希望点区域是透明的,图像填满整个屏幕@DougWatkins

标签: ios uiimage fullscreen uipageviewcontroller tabview


【解决方案1】:

该页面上有一个非常简单的解决方案:http://tunesoftware.com/?p=3363

它是通过重写UIPageViewControllerviewDidLayoutSubviews方法来完成的,基本上做了两件事:

  1. 通过将 UIPageViewController 内的 UIScrollView(内容)的范围设置为页面控制器视图的范围
  2. UIPageControl 元素(点)移动到视图层次结构的前面,使其位于内容的前面

这是他提供的代码(以防链接损坏):

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!)
        }
    }
}

之后你要做的就是:

  • 如果您在情节提要中设置页面控制器,则只需转到身份检查器窗格并将其类更改为 TSPageViewController
  • 如果您在代码中设置页面控制器,则只需确保您为其定义的类继承 TSPageViewController 类。

【讨论】:

  • 如果我通过 var pageControl = UIPageControl.appearance() 在 AppDelegate.swift 中创建页面控件。我如何确保它继承了这个类?
【解决方案2】:

这里是 Objective-C 版本。创建一个新类(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多