在导航控制器中添加子视图覆盖导航栏
Posted
技术标签:
【中文标题】在导航控制器中添加子视图覆盖导航栏【英文标题】:Adding Subview Covers Up Navigation Bar in Navigation Controller 【发布时间】:2014-08-07 15:20:54 【问题描述】:我有一个导航控制器,有时我需要显示一个子视图来输入密码。问题是,当我这样做时,它会覆盖导航栏,从而无法返回层次结构。我为此使用 XIB,但它没有让我选择调整添加在其上的 UIView 的大小。
if ([student isEqualToString:@"No"])
[self.navigationController.view addSubview:password];
[self.navigationController.view bringSubviewToFront:password];
【问题讨论】:
【参考方案1】:这里有一些建议(假设我了解您的问题)。鉴于您正在提示输入密码,我假设您希望用户 a) 提供密码或 b) 取消输入密码(而不是简单地忽略它)。如果他们执行后者,则可以使用取消按钮来关闭密码子视图。
建议:
-
在子视图中添加取消按钮以关闭子视图
使用 UIAlertView 显示一个模式对话框,通过取消按钮捕获密码(见下文)
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Password" message:@"Enter your password:" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; // 屏蔽密码文本
如果您已设置当前方法,则定义类似于以下内容的子视图,使其偏离导航栏(或使用约束)
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 200, tableView.frame.size.width, 100)];
【讨论】:
【参考方案2】:如果您能提供所见内容的屏幕截图和您尝试构建的界面设计的图像,将会很有帮助。
上面的代码看起来有点奇怪。使用addSubview:
将这种类型的视图添加到您的navigationController 可能会产生意想不到的后果。
我会推荐:
-
在新的
UIViewController
子类中构建您的密码输入 UI,并使用 pushViewController:animated:
将此新的 viewController 添加到视图层次结构中。
或
-
通过使用系统
UIAlertView
或使用UIWindow
构建自定义警报视图,使用alertView 捕获密码条目。
如果您需要进一步解释/澄清,请告诉我。
【讨论】:
以上是关于在导航控制器中添加子视图覆盖导航栏的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中使 NavigationBar 子视图可点击