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
UINavigationController 的自定义 UIBarButtonItem/UISegmentedControl
添加 UIStackView 作为 UIBarButtonItem 的自定义视图