3

在 xcode 4.6 中启动 iPad Master-Detail 应用程序时,在纵向上,有一个可关闭的菜单(在横向上它总是打开)。这个菜单(是弹出框的正确名称吗?)在 iOS 5.0 和 iOS 5.1 中看起来完全不同,见下图:

在此处输入图像描述

有没有办法让 5.0 中的弹出框看起来与 5.1(及更高版本)中的一样?例如。它占据屏幕的整个高度,没有额外的边框/箭头等。所需的行为以绿色突出显示,iOS5.0 以红色突出显示。

编辑:我尝试使用自定义 popoverBackgroundViewClass 并(用于定位)手动显示弹出框:

self.masterPopoverController.popoverBackgroundViewClass = [EBPopoverBackgroundView class];
[self.masterPopoverController setPopoverContentSize:CGSizeMake(320, 1004)];
[self.masterPopoverController presentPopoverFromRect:CGRectMake(-20, -40, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];

但它只起作用了一点:

popoverBackgroundViewClass 解决方案

弹出框的左侧和底部有一些我无法删除的斑点(我尝试过超大的弹出框,但底部空间并没有消失。我尝试将它更向左移动,但是左边的空间没有消失)。此外,导航栏太薄了(大约薄了 10 像素),我也无法改变它(尽管最后一点我没有那么努力)。最后但并非最不重要的是,弹出框右侧有一条 1px 的黑线(即使我将 insets 设置为 0)。

我已经实现了这样的背景类:

@interface EBPopoverBackgroundView : UIPopoverBackgroundView
@end

和.m

@implementation EBPopoverBackgroundView {

}

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        NSLog(@"Init with frame %@", NSStringFromCGRect(frame));
    }

    return self;
}

- (CGFloat)arrowOffset {
    return 0.0;
}

- (void)setArrowOffset:(CGFloat)arrowOffset {
    // pass
}

- (UIPopoverArrowDirection)arrowDirection {
    return UIPopoverArrowDirectionRight;
}

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

+ (CGFloat)arrowHeight {
    return 1.0;
}

+ (CGFloat)arrowBase {
    return 1.0;
}

+ (UIEdgeInsets)contentViewInsets {
    return UIEdgeInsetsMake(0, 0, 0, 0);
}

- (void)drawRect:(CGRect)rect {
    NSLog(@"DrawRect %@", NSStringFromCGRect(rect));
    [super drawRect:rect];
}


+ (BOOL)wantsDefaultContentAppearance {
    return YES;
}


@end
4

1 回答 1

0

就我的研究而言,除了从头开始将弹出框作为一个全新的组件实现之外,没有其他方法可以做到这一点。

于 2013-03-29T06:48:14.400 回答