Ios7 UISplitviewController导航栏之间的白线

Ios7 UISplitviewController导航栏之间的白线,ios7,uisplitviewcontroller,Ios7,Uisplitviewcontroller,我在iOS7上的UISplitviewController中看到导航栏之间有一个白色分隔符。 我找不到办法把它改成黑色。我将splitViewController视图的背景色更改为黑色,但运气不佳 屏幕截图:只要您的屏幕是横向的,您就可以将其用作解决方案: UIView *coverView = [[UIView alloc] initWithFrame:CGRectMake(320, 0, 1, 64)]; [coverView setBackgroundColor:[UICo

我在iOS7上的UISplitviewController中看到导航栏之间有一个白色分隔符。 我找不到办法把它改成黑色。我将splitViewController视图的背景色更改为黑色,但运气不佳


屏幕截图:

只要您的屏幕是横向的,您就可以将其用作解决方案:

    UIView *coverView = [[UIView alloc] initWithFrame:CGRectMake(320, 0, 1, 64)];
    [coverView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"black_pixel.png"]]];
    [splitViewController.view addSubview:coverView];
试试这个:

if ( floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1 ) {
    splitViewController.view.backgroundColor = [UIColor blackColor];
}

您可以执行以下操作以消除该白线:

self.splitViewController.view.backgroundColor = [UIColor blackColor];
for (UIView *subView in self.splitViewController.view.subviews) {
    subView.backgroundColor = [UIColor blackColor];
} 
对于无法直接访问splitViewController的自定义方式,请执行以下操作:

UIViewController *_splitViewController = self.parentViewController;
while (![_splitViewController isKindOfClass:[UISplitViewController class]]) {
    _splitViewController = _splitViewController.parentViewController;
}
_splitViewController.view.backgroundColor = [UIColor blackColor];
for (UIView *subView in ((UISplitViewController *)_splitViewController).view.subviews) {
    subView.backgroundColor = [UIColor blackColor];
}

在引擎盖下,屏幕顶部的主视图和详细视图下方有一个
uilayoutcainerview
。要更改导航栏之间的分隔符颜色,只需更改该视图的背景色

在Swift中,在SplitViewController的子类中,尝试以下操作:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if let potentialSeparatorView = view.subviews.first as? UIView {
        if round(potentialSeparatorView.bounds.height) == 64 {
            potentialSeparatorView.backgroundColor = UIColor(red:0.20, green:0.55, blue:0.83, alpha:1)
        }
    }
}

将您的
UISplitViewController
放入具有容器视图的附加
ViewController
,如下所示:

然后在主视图和详细视图控制器中隐藏
UINavigationBar
s,在附加UIViewController中只有一个
UINavigationBar
,没有白线

使用


在tableviewcontroller(主视图控制器)中,您也可以设置所需的颜色。

请检查这是唯一允许我在表格视图之间来回导航时将分隔线颜色更改为几种不同颜色的颜色。我没有使用“黑色像素”,而是设置了“coverView”的背景颜色。访问您不拥有的类的子视图是不安全的,而且您永远不应该在装运应用程序中这样做。将浮点值与特定值(即没有某种epsilon)进行比较也是如此,因为它非常不可靠。简言之:不要这样做。不要这样做。这两个都不是。谢谢你的警告。您能否详细说明为什么在这种情况下访问view.subviews[0]是不安全的?为了比较浮点,我知道它不准确,但我并不是在发射核武器。如果失败,背景颜色就不会改变,因为类的所有者可以随时更改视图层次结构(显然,苹果经常这样做)。一般来说,永远不要依赖于无主类的实现细节(如果有的话)。只要Apple更改视图的尺寸或由于可能的舍入错误而以不同的方式计算高度,您的
height==64
就会失败。@Regexident是的,但您知道,除了我的答案之外,现有的答案都不起作用。如何更改分隔符颜色是完全没有文档记录的,唯一的方法是一些肮脏的黑客。此外,我还对可靠性做了一些更改。人们可以选择构建弹性/安全的应用程序或“仅工作”的应用程序。只要有可能,我就选择前者。例如,苹果可能会选择在某个时候添加一个
UIResponder
子类(该子类与UIView兼容,但不是UIView的子类)作为上述视图的“子视图”。谁知道呢。他们可以随心所欲。毕竟这是他们的课。一旦他们这么做了,你的强制转换到
UIView
就会发生不好的事情<代码>致命错误-级别错误。您希望您的代码是可预测的。依赖于实施细节并不重要。
splitViewController?.view.backgroundColor = UIColor.clear