代码之家  ›  专栏  ›  技术社区  ›  Mike Weller

在分割视图控制器的主窗格上使用色调

  •  1
  • Mike Weller  · 技术社区  · 15 年前

    在拆分视图控制器的主窗格中有一个导航控制器。它在导航栏上设置了色调。当此导航控制器显示在分割视图的popover中时,popover不会以黑色popover样式显示导航项,而是使用了之前设置的色调:

    alt text http://img6.imageshack.us/img6/2650/tint.png

    alt text http://img707.imageshack.us/img707/9725/screwedup.png

    我尝试处理willPresentViewController等,在弹出窗口中显示之前清除色调,并在返回时恢复色调。这几乎可以正常工作,但当切换回横向模式时,在切换回之前,在动画中可以看到标准的iPad色调,并且某些导航项上的色调设置不正确:

    在展示popover作品前清除色调:

    alt text http://img38.imageshack.us/img38/3237/betterfq.png

    但在返回的路上,按钮处于不一致的状态:

    alt text http://img802.imageshack.us/img802/1937/inconsistent.png

    打电话 setNeedsDisplay 等不起作用。

    编辑:

    3 回复  |  直到 14 年前
        1
  •  0
  •   deanWombourne    15 年前

    我认为您在SDK中发现了一个非常模糊的错误:)-您应该向苹果提交一份错误报告

    我构建了一个测试应用程序,让它重现你的问题:

    • 在主窗格(DetailView)中设置工具栏的色调(红色)
    • 设置导航项的色调(蓝色)
    • 添加几个条形按钮项以检查布局是否正常

    这表明布局错误(如上面的屏幕截图所示)

    然后我建立了另一个,这是绝对好的:(唯一的区别是创建这些应用程序我从来没有设置在弹出视图中的导航项目的色调。

    我试着将我原来项目中导航项的色调设置回“default”以查看发生了什么,布局错误仍然存在,因此,就我所能看到的而言,无论设置什么色调都是不可更改的。

    山姆

    PS我知道这不是一个真正的答案,但这是我最好的-我会继续玩它,看看发生了什么:)


    好吧,我已经玩过了,可以看到发生了什么-尽管我不是100%确定我理解它。

    我用git拍摄了我正在工作的第二个项目的快照(在主视图工具栏上有一个色调,但在弹出窗口上有一个工作布局的项目)。

    然后我通过在弹出窗口的导航栏上设置色调来打破它。

    git diff

        <bool key="IBUIClipsSubviews">YES</bool>
        <bool key="IBUIMultipleTouchEnabled">YES</bool>
        <string key="targetRuntimeIdentifier">IBIPadFramework</string>
    +     <object class="NSColor" key="IBUITintColor">
    +      <int key="NSColorSpace">1</int>
    +      <bytes key="NSRGB">MSAwLjg4NTI1MDE4NjEgMC42NDExMjQ4OTI1AA</bytes>
    +     </object>
        </object>
    

    这是添加到我的导航控制器定义中的新色调,也是破坏布局的原因。

    然后我进入界面生成器,将弹出窗口导航栏的样式设置为“默认”-色调恢复为默认,当我运行应用程序时,它又被修复了。

    差异比较 我发现上面添加的行已被删除。

    然后我试着使用这些样式-我将样式设置为“黑色不透明”,然后运行应用程序-它可以正常工作。这是因为设置样式不会设置黑色色调,而是会将这一行添加到xib:

    +   <int key="IBUIBarStyle">1</int>
    

    1) 在界面生成器中设置样式

    2) 手动编辑xib文件以删除指定色调的行

    barStyle property 在你的代码中(但我不是100%确定这个会起作用)

    希望对你有帮助,谢谢你的挑战,

    山姆

        2
  •  0
  •   deanWombourne    15 年前

    我最后的回答完全错了!

    此代码删除旋转到纵向模式后的色调,并将旋转前的色调设置为横向模式:

    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
        [super willRotateToInterfaceOrientation:orientation duration:duration];
    
        if (orientation == UIInterfaceOrientationLandscapeLeft ||
            orientation == UIInterfaceOrientationLandscapeRight) {
            [bar setTintColor:[UIColor redColor]];  
        }
    }
    
    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
        [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    
        UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
    
        if (orientation == UIInterfaceOrientationPortrait ||
            orientation == UIInterfaceOrientationPortraitUpsideDown) {
            [bar setTintColor:nil];
        } 
    }
    

    你说你已经在willPresentViewController中尝试过了,但是没有用——这对我来说似乎很管用,把它放在这两种方法中。

        3
  •  0
  •   Mike Weller    13 年前