【问题标题】:Full Screen Custom Popover issue in iOS7 and iOS8iOS 7 和 iOS 8 中的全屏自定义弹出框问题
【发布时间】:2015-01-16 17:30:38
【问题描述】:

我正在开发一款仅适用于 iPad 的应用。我想在其中一项功能中显示 FullCustom Popover

为此,我的代码如下:-

DuplicateViewController *viewControllerForPopover =
    [self.storyboard instantiateViewControllerWithIdentifier:@"DuplicatePopoverVC"];
    viewControllerForPopover.arr_studentDetail = self.arrStudentDetail;
    viewControllerForPopover.dictSelectedProg = dictSelectedProgram;

    self.popover = [[UIPopoverController alloc]
                    initWithContentViewController:viewControllerForPopover];
    [self.popover setPopoverContentSize:CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];

    viewControllerForPopover.modalPresentationStyle = UIModalPresentationFullScreen;
    [self.popover setBackgroundColor:[[UIColor darkGrayColor] colorWithAlphaComponent:0.4]];
    [self.popover presentPopoverFromRect:self.view.bounds inView:self.view permittedArrowDirections:0 animated:YES];

我设置了弹出框大小并尝试了其他选项,但无法使其全屏显示。

ViewDidLoad -> DuplicateViewController

[view_main.layer setBorderWidth:5.0f];
[view_main.layer setCornerRadius:25.0f];
[view_main.layer setBorderColor:[UIColor colorWithRed:(29.0f/255.0f) green:134.0f/255.0f blue:140.0f/255.0f alpha:1.0f].CGColor];

但在运行应用程序时,它显示如下:-

请帮我显示全屏弹出框。非常感谢您。

【问题讨论】:

  • popovercontroller 限制了最小和最大高度和宽度,超出了内容大小框架不适用的范围,它将在所有角落留下大约 20 点的空间。我认为它是为箭头。如popover.h文件中提到的“该属性允许对popover的内容大小进行方向操作。直接更改该属性相当于animated=YES。内容大小限制为最小宽度为320,最大宽度为600。 "

标签: ios objective-c ipad uipopovercontroller


【解决方案1】:

创建两个类 第一个应该继承 UIPopoverController 第二个应该继承 UIPopoverBackgroundView

例如:

CustomUIPopoverController.h

@interface CustomUIPopoverController : UIPopoverController

CustomUIPopoverController.m

@implementation CustomUIPopoverController

- (id)initWithContentViewController:(UIViewController *)viewController {
    self = [super initWithContentViewController:viewController];
    if (self) {
        self.popoverBackgroundViewClass = [CustomUIClearPopoverBackgroundView class];
        [self setPopoverContentSize:viewController.view.frame.size];
    }
    return self;
}

@结束

CustomUIClearPopoverBackgroundView.h

@interface CustomUIClearPopoverBackgroundView : UIPopoverBackgroundView

CustomUIClearPopoverBackgroundView.m

#import "CustomUIClearPopoverBackgroundView.h"

@implementation CustomUIClearPopoverBackgroundView

#pragma mark - no arrow

+ (CGFloat)arrowHeight {
    return 0;
}

+ (CGFloat)arrowBase {
    return 0;
}

- (CGFloat)arrowOffset {
    return 0;
}

- (void)setArrowOffset:(CGFloat)arrowOffset {

}

- (UIPopoverArrowDirection)arrowDirection {
    return 0;
}

- (void)setArrowDirection:(UIPopoverArrowDirection)arrowDirection {
}


#pragma mark - no margins

+ (UIEdgeInsets)contentViewInsets {
    return UIEdgeInsetsZero;
}

#pragma mark - fully transparent (default is 0.15)

+(BOOL)wantsDefaultContentAppearance {

    return NO;
}

- (void)willMoveToWindow:(UIWindow *)newWindow {
    [super willMoveToWindow:newWindow];

    // hide shadow image view
    [self.superview.subviews[0] setHidden:YES];
}
@end

我用过这个,但我不太喜欢它。 第二个选项是创建一个容器视图并根据需要隐藏/显示它。 这样它是一个纯粹的视图控制器,你不需要弄乱弹出的东西 要创建透明度,使您的容器视图背景 = 清晰,视图控制器视图背景颜色 = 清晰,并在视图控制器的大小中添加一个半透明按钮,用于半透明黑色背景。单击按钮关闭窗口(= 与点击弹出背景相同的效果)

【讨论】:

  • 我会尽快检查并联系您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2019-04-16
  • 2016-09-09
相关资源
最近更新 更多