UISplitViewController:删除分隔线

时间:2010-04-07 03:51:02

标签: objective-c cocoa-touch ipad uisplitviewcontroller

在iPad上使用UISplitViewController时,在根视图和细节视图之间有一条黑色垂直分隔线。有没有办法删除这一行?

由于

13 个答案:

答案 0 :(得分:10)

我对(Dylan)的回答有一些修改

在appDelegate中我们需要在spliteview控制器中添加图像而不是窗口

self.splitViewController.view.opaque = NO;  
imgView = [[UIImageView alloc] initWithImage:
        [UIImage imageNamed:@"FullNavBar.png"]];  
[imgView setFrame:CGRectMake(0, 0, 1024, 44)];  
[[self.splitViewController view] insertSubview:imgView atIndex:0]; 
[[self.splitViewController view] setBackgroundColor:[UIColor clearColor]];  

这里自我是AppDelegate的对象。

现在应用此主题的答案:iPhoneOS SDK - Remove Corner Rounding from views (iPad problem)通过(绝对)回答

编辑上面帖子的答案是

-(void) fixRoundedSplitViewCorner {  
     [self explode:[[UIApplication sharedApplication] keyWindow] level:0];  
}  
-(void) explode:(id)aView level:(int)level 
{

    if ([aView isKindOfClass:[UIImageView class]]) {
        UIImageView* roundedCornerImage = (UIImageView*)aView;
        roundedCornerImage.hidden = YES;
    }
    if (level < 2) {
        for (UIView *subview in [aView subviews]) {
            [self explode:subview level:(level + 1)];
        }
    }

    imgView.hidden = FALSE;
}

**使imgView.hidden为FALSE 将imgView声明到AppDelegate.h文件**

并且别忘了给这个打电话

-(void)didRotateFromInterfaceOrientation:
        UIInterfaceOrientation)fromInterfaceOrientation
{
    [yourAppDelegate performSelector:@selector(fixRoundedSplitViewCorner) 
          withObject:NULL afterDelay:0];
}

答案 1 :(得分:9)

@bteapot的优秀答案。我测试了这个并且它可以工作,甚至可以摆脱主/细节导航条之间的界限。

您可以在故事板中添加&#34; gutterWidth&#34;键路径和USplitViewController运行时属性的值0。

enter image description here

答案 2 :(得分:6)

chintan adatiya回答仅涵盖了角落和导航栏,但我发现了如何覆盖Master和Detail视图之间的界限。

这不好看,但它就像一个魅力。

  1. 首先创建宽1 px,高704像素的图像。

  2. 在didFinishLaunchingWithOptions中添加以下代码:

    UIView *coverView = [[UIView alloc] initWithFrame:CGRectMake(320, 44, 1, 704)];
    [coverView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"divider_cover.png"]]];
    
    [splitViewController.view addSubview:coverView];
    
  3. 完成了。

    如果您想要背景图像,请继续创建3张图片:

    • 主人:宽:320,身高:704
    • 细节:宽度:703,身高:704
    • 分隔线:宽度:1,高度:704

答案 3 :(得分:5)

首先发帖,大家好。

我发现了如何意外地做到这一点......当我试图找到为什么我失去了分隔线时。如果您仍然感兴趣,可以使用以下隐藏方法:

1)在您的详细信息(右侧)视图中,确保您有一个跨越整个视图的子视图。

2)将此子视图视图偏移到(-1,0)。

3)确保详细视图未选中“剪辑子视图”选项。

Voilà,享受。

答案 4 :(得分:3)

你可以通过在主窗口的视图中设置其背后的另一个图像来摆脱它。这是来自app delegate didFinishLaunchingWithOptions

// Add the split view controller's view to the window and display.
splitViewController.view.opaque = NO;
splitViewController.view.backgroundColor = [UIColor clearColor];
[window addSubview:splitViewController.view];
[window insertSubview:bgImageView belowSubview:splitViewController.view];
[window makeKeyAndVisible];

但它仍然在顶部和底部留下了两个看似神器,看起来是由splitviewcontroller自定义绘制的。

答案 5 :(得分:2)

有趣的是,在我正在处理的应用程序中,我希望UISplitViewController中的两个视图都有黑色背景颜色。我想将分隔线的颜色更改为白色(这样你就可以看到它)。将两种背景颜色都设置为黑色是摆脱(隐藏)分界线的一种方法,但对于大多数人来说这可能不是解决方案。

答案 6 :(得分:1)

我环顾了一会儿,得出的结论是,除了创建自己的自定义拆分视图外,没有办法做到这一点。

答案 7 :(得分:1)

尝试Matt Gammell的MGSplitViewController

http://mattgemmell.com/2010/07/31/mgsplitviewcontroller-for-ipad

答案 8 :(得分:1)

我可能会迟到,但我做有一个有效的解决方案。它甚至适用于iOS 8+ splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible ;按下全屏切换按钮时无缝滑入和滑出。

这是诀窍:

第一个子类 UISplitViewController.m

在标题中添加以下内容:

@property (strong, nonatomic) UIView *fakeNavBarBGView;

viewDidLoad 方法中添加以下代码:

CGFloat fakeNavBarWidth = 321; // It is important to have it span the width of the master view + 1 because it will not move when the split view slides it's subviews (master and detail)
CGFloat navbarHeight = self.navigationController.navigationBar.frame.size.height + 20;
self.fakeNavBarBGView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, fakeNavBarWidth, navbarHeight)];
self.fakeNavBarBGView.backgroundColor = [UIColor redColor];

// Add Fake navbar to back of view
[self.view insertSubview:self.fakeNavBarBGView atIndex:0];

// SplitView Controller
UISplitViewController *splitViewController = self;
DetailViewController *detailVC = [navigationController.viewControllers lastObject];

detailVC.fakeNavBarSubView = self.fakeNavBarBGView;
detailVC.SVView = self.view;

DetailViewController.h 中添加以下内容:

@property (strong, nonatomic) UIView *SVView;
@property (strong, nonatomic) UIView *fakeNavBarSubView;

现在这是最后一招:在 DetailViewController.m 中,在viewDidLoad方法中添加以下内容(每次单击Master表时调用):

[self.SVView sendSubviewToBack:self.fakeNavBarSubView];
[self.SVView bringSubviewToFront:self.view];

运行它并观看魔法; - )

答案 9 :(得分:1)

私有API(可能导致App Store拒绝):

[splitViewController setValue:@0.0 forKey:@"gutterWidth"];

答案 10 :(得分:1)

在iOS10上测试过(可能也适用于iOS9)。

splitviewController.view.backgroundColor = UIColor.white

它删除了分隔符。显然,分隔符只是主容器和细节容器之间的间隙。

答案 11 :(得分:-1)

我通过设置第一个viewController视图的backgroundColor属性意外地做了这个 - 可能是clearColor,我现在不记得了。

答案 12 :(得分:-3)

UIManager.put(“SplitPaneDivider.draggingColor”,新颜色(255,255,255,0));