【问题标题】:Customization of UIBarButtonItem and interface rotationsUIBarButtonItem 和界面旋转的自定义
【发布时间】:2013-04-25 09:55:27
【问题描述】:

有很多关于使用自定义视图作为 UIButton 自定义 UIBarButtonItem 的讨论。这很清楚。到目前为止,我还没有发现,令我惊讶的是,没有提到处理界面旋转的自定义 UIBarButtonItems - 当您旋转 iPhone 时,这是一种常见的行为,条形按钮会被垂直挤压。但是,如果您以普通方式自定义 UIBarButtonItem(通过调用initWithCustomView: 方法),它将在旋转为横向后保持非挤压状态。有什么解决方法吗?

【问题讨论】:

    标签: ios uibutton uibarbuttonitem


    【解决方案1】:

    好吧,我已经找到了在自定义 UIBarButtonItem 类中处理 UIApplicationDidChangeStatusBarOrientationNotification 的解决方案相当不错。

    【讨论】:

      【解决方案2】:

      如果您可以从 IB 添加 UIBarButtonItem(您不必以编程方式创建它),您可以设置弹簧和支柱以获得默认行为。这个解决方案对我有用。

      【讨论】:

      • 嗯。只有宽度和图像插图可以自定义。但无论如何,如果我在问题中所说的UIBarButtonItem 需要自定义视图怎么办? (这是我的情况)
      • 问题是如果你想从IB的导航栏中自定义UIBarButton,你可以在导航栏上拖一个UIBarButtonItem,然后在UIBarButtonItem里面拖一个UIButton,然后你可以自定义你喜欢的UIButton(背景、标题等)。对于您的情况,我认为您可以创建一个自定义 UIView,其中包含一个按钮(或其他视图),并设置 spring 和 struts 以获取您的行为。注意:我没有测试这个案例,但我看不出有任何原因导致它无法工作。
      • hm,如果你的 xib 中有一个UINavigationController,这看起来可能会起作用。但是,这不是我的情况。不过还是谢谢你的提示!
      【解决方案3】:

      我认为您应该使用新的方向图像和文本重建 UIBarButtonItem(您的自定义 UIButton),或者重置自定义视图的框架。

      - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
      {
          UIButton *rightItemButton = (UIButton *)self.navigationItem.rightBarButtonItem.customView;
          //resize the frame
          if (isLandscape) {
      
          } else if (isPortrait) {
              ....
          }
      }
      

      【讨论】:

      • 您的意思是从视图控制器的didRotateFromInterfaceOrientation: 方法更改按钮的属性吗?在我看来,从代码设计的角度来看,它非常丑陋 - 视图控制器除了调整按钮的自定义视图之外还有足够的工作要做,这些按钮是放置在 uinvaigationbar 上的 uinavigationitem 的子按钮的自定义视图 - 太疯狂了!我希望苹果对此有更好的解决方法...
      • 是的,因为这是你的自定义视图,你应该自己控制它,你也可以在你的 ViewControllers 中覆盖 - (void)layoutSubviews 来重置任何子视图的大小和位置
      • 嗯,是的,我同意.. 但是,在我看来,这样的微调仍然会限制我们使用“好的”代码设计 - 例如,在这种情况下,我认为设计这样的代码更合乎逻辑条形按钮,它将完全自主并自行处理其内容。我认为如果苹果提供任何类型的didAdjustFrameForNewOrientation: 电话或类似这样的东西,这种情况尤其可以解决。
      猜你喜欢
      • 2018-08-24
      • 2013-10-31
      • 2011-05-06
      • 1970-01-01
      • 2016-12-23
      • 2012-06-15
      • 2020-03-21
      • 1970-01-01
      相关资源
      最近更新 更多