【问题标题】:Custom UIView covering UITabBar on iPhone but not iPad自定义 UIView 覆盖 iPhone 上的 UITabBar 而不是 iPad
【发布时间】:2012-09-20 15:31:41
【问题描述】:

我正在创建一个覆盖窗口的自定义 uiView。它的行为有点像导航控制器中的诱饵 uiview。所以我不得不这样做来覆盖导航栏......长篇大论......

这是它的设置方式。

self.searchPopDown.frame = CGRectMake(0, 20, self.navigationController.view.frame.size.width, self.navigationController.view.frame.size.height-20);

    self.searchPopDown.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

20是为了补偿状态栏。

然后我只需将视图作为子视图添加到应用程序窗口。

//this will add the view ontop of a modalViewController and support rotation!
UIWindow* window = [UIApplication sharedApplication].keyWindow;
if (!window) {
    window = [[UIApplication sharedApplication].windows objectAtIndex:0];
}

if ([[[window subviews] objectAtIndex:0] isKindOfClass:[SVProgressHUD class]]){
    //There is a chance that the window will be the SVProgressHUD in this case we need to get the main window.

    window = [[UIApplication sharedApplication].windows objectAtIndex:0];
}
    [[[window subviews] objectAtIndex:0] addSubview:self.searchPopDown];

所有这些都很好用。但是我注意到了一些奇怪的事情。在 iPhone 上,这个视图最终会被调整大小以覆盖我应用程序底部的 UITabBar。但在 iPad 上,它会正确调整大小以补偿 UITabBar。任何想法为什么?

谢谢

==================

以下是一些描述该问题的屏幕截图。这就是当视图加载到所有内容的假视图时的样子。视图显示(就用户而言,只是视图和导航栏上的按钮略有变化。当您搜索此假视图时消失,显示下面的真实视图和搜索结果。在 ipad 上,假视图没有'不覆盖标签栏。为什么它不在 iphone 上也这样做?

===========

编辑 2 另一个奇怪的事情。我正在生成日志消息以获取导航控制器的高度。它会改变 49,具体取决于我是正常显示还是显示为模态视图并且没有标签栏。

所以日志说 431 应该是正确的高度。我进入界面生成器并设置了一个简单的粉红色视图,测量值为 431,它看起来很棒:) 但是当我手动将大小设置为 431 时,它不起作用。我必须将大小设置为 298 才能使其正常工作......很奇怪......

看到粉色条了吗?它实际上是 431 高……日志说这就是我的观点……但事实并非如此:/

============

编辑:3

我已将其追溯到图像背景,气泡徽标的大小调整不正确...

【问题讨论】:

  • 您是否有任何模型或屏幕截图来描述您想要什么以及实际发生了什么?这样会更容易看到问题:)
  • 给我一两分钟...我上传截图...
  • 嗯...首先,为什么要全屏显示?只制作一个小的叠加层或弹出框/模态视图会更容易。那么,你能检查self.navigationController.view 视图的大小吗?您不能改用键窗口的大小吗?
  • 因为这必须覆盖导航栏。如果我使用模态视图,它将覆盖标签栏...
  • 你真的在 Xcode 中使用那些 UI 颜色编码吗?

标签: iphone ipad uiview uitabbar uiwindow


【解决方案1】:

我必须在 imageview 所在的父视图上检查“剪辑子视图”...修复了问题...

【讨论】:

  • 是的......当做这样奇怪的事情时,它总是很痛苦,但一旦成功......
  • 提示一下,您的视图框架不是 viewDidLoad 期间的最后一个框架,而是 ViewWillAppear 中的最后一个框架。您应该查看subjective-objective-c.blogspot.ch/2011/08/… 以了解 UIViewController 的生命周期。另一个提示,正如苹果工程师所说,“不要与框架抗争”。我们的黑客背后都有一个很长的故事,但这通常是一个坏主意,黑客只有一个目标:停止使用下一个 iOS 版本
猜你喜欢
  • 2013-01-29
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多