我正在制作媒体播放器应用。我有UITableViewControllers嵌入在导航控制器中。我想以某种方式制作一个可以叠加这些tableview控制器的多个(2?)的视图(一个显示用户的播放列表,另一个显示播放列表中的曲目),但仅限于底部,就像在(例如)Spotify的iOS应用程序中的现在玩吧(如本左侧底部
或在此
我试图将一个容器视图拖到我的导航控制器中(我的嵌入了我的TableViewCell),但它不会让我把它放在那里。
看起来我可以将Container View拖到我的TableView中,但是当我在tableviews之间导航时它会如何保留?
试图遵循@ Rintaro的建议,但我对XCode有点新意。你是怎么做的?所以我制作了一个单一的视图应用程序,我为第一个VC添加了一个容器视图,它将它绘制在故事板中的其他地方,但我无法弄清楚如何告诉该视图它&#39 ; sa导航控制器。另外,只要我向第一个VC添加第二个容器并尝试调整它的大小,第一个容器就会消失!它仍然在左侧的层次结构中列出,并且仍然有一个指向它的箭头,但是添加并被指向的视图控制器也是不可见的?!
更新:这非常有效,但是方向更改有问题。我怎样才能在两个方向上完成这项工作? (我假设它当前定位"现在播放视图"当方向改变时关闭屏幕。)
答案 0 :(得分:20)
基本上,像这样构建的视图层次结构如下:
使用两个"容器视图"在初始视图控制器中,一个用于导航控制器,一个用于"正在播放栏"查看控制器。
增加:
"主容器视图控制器"将是您自己的UIViewController
子类。它将有责任显示/隐藏"正在播放栏"。
Interface Builder奇怪行为的解决方法。
您可以设置如下的自动布局约束。也许你可能想从左侧菜单中选择视图。
请注意,您应取消选中 Constrain to margins
复选框。
导航控制器的容器视图:
正在播放栏控制器的容器视图:
然后,菜单中的Update Frames
:
答案 1 :(得分:2)
如果您手动放置任何带有绝对坐标的按钮,请确保在更改旋转时更新它们的坐标。
答案 2 :(得分:0)
显然,您需要创建一个自定义UIView类,您将在其中显示此菜单。当您创建它时,将其添加到您的视图中,就像这样:
float y = ROOTVC.view.frame.size.height - 49;
[self setFrame:CGRectMake(0, y, 320, 49)];
[ROOTVC.view addSubview:self];
[ROOTVC.view bringSubviewToFront:self];
答案 3 :(得分:0)
我只需向nowPlayingView
添加appDelegate.window
并调整:
window.rootController.view
框架,以避免与nowPlayingView
重叠。
如果window.rootController.view
是UIScrollView
,请调整其contentInset.bottom
以避免重叠nowPlayingView
。您还可以对此解决方案使用透明度/半透明度。
向控制器添加一个虚拟工具栏,该工具栏将被nowPlayingView
覆盖。
如果您的window.rootController
是UINavigationController
,那么您必须在推送的每个控制器之前执行以上操作。 nowPlayingView
将保持不变。