UIBarButtonItem 和界面旋转的自定义

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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: 电话或类似这样的东西,这种情况尤其可以解决。

以上是关于UIBarButtonItem 和界面旋转的自定义的主要内容,如果未能解决你的问题,请参考以下文章

UIbarbuttonItem 标题的自定义字体

如何创建没有光泽效果的自定义 UIBarButtonItem

UINavigationController 的自定义 UIBarButtonItem/UISegmentedControl

添加 UIStackView 作为 UIBarButtonItem 的自定义视图

UIBarButtonItem 的默认后退按钮背景图像出现在我的自定义

如何从 UIBarButtonItem 中删除样式?