【问题标题】:how to set iOS 6/7 Deltas programmatically如何以编程方式设置 iOS 6/7 Deltas
【发布时间】:2013-10-01 06:40:35
【问题描述】:

当我离开 iOS6 时,我正在使用 Xcode 4.6 开发 UISplitView 应用程序:

现在我迁移到新的 Xcode5,现在我有了这个设计:

UINavigationBar 与我的 UISearchBar 完全重叠...

Leo Natan 告诉我有关使用 iOS 6/7 Deltas 的信息,但由于我是以编程方式创建和添加我的 UISplitViewControllers,

这可能不起作用我需要以编程方式设置 iOS 6/7,但我不知道如何,任何帮助我将不胜感激

【问题讨论】:

  • 如果你想在代码中做到这一点,你必须使用框架。 if (iOS7) {view.frame = ...} else {view.frame = ...}
  • @PetroKorienev 或者只是更改约束常量?这比更新框架更容易。
  • OP 不使用自动布局,并在代码中初始化了他的控制器。在代码中添加约束并不比更新框架容易..

标签: ios objective-c uisearchbar xcode5 delta


【解决方案1】:

如果视图嵌入在 UINavigationController - 只需取消选中根导航栏的“半透明”即可。

在故事板中,选择导航控制器场景, 接下来选择导航栏和属性检查器(实用程序 - 4 选项卡) 取消勾选“半透明”

【讨论】:

    【解决方案2】:

    您可以创建一个 makro 来解决这个问题。 对我有用。

    #define iOS7Delta (([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0 ) ? 20 : 0 )
    

    【讨论】:

      【解决方案3】:

      另外,您可以使用 NSFoundationVersionNumber

      if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        // > iOS7
      } else {
        // <= iOS6
      }
      

      【讨论】:

      • Apple 在 iOS 7 过渡指南中建议采用这种方式。
      【解决方案4】:

      在 iOS 7 中,现在有扩展边缘,这就是导航栏与搜索栏重叠的原因。您可以设置self.edgesForExtendedLayout = UIRectEdgeNone; 这是 UIVewControlelr 属性。 您还可以根据 iOS 的版本进行检查,您可以根据设备中当前的 iOS 版本进行操作。

      NSString *version = [[UIDevice currentDevice] systemVersion];
      int ver = [version intValue];
      if (ver < 7){
      //iOS 6 work
      }
      else{
      //iOS 7 related work
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-19
        • 2014-01-26
        • 2011-12-09
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        • 1970-01-01
        相关资源
        最近更新 更多