Zee*_*zer 9 iphone master-detail ipad uisplitviewcontroller ios
我想实现与Facebook Messenger应用程序相同的流程,在主视图中有一个标签栏控制器.看到
我完全按照这个答案中的描述完成了 创建一个带有Master-detail模板的TabBar控制器?
然而!它在iPhone上无法正常工作,仅适用于iPad.在iPhone上,向后导航不起作用.细节窗格打开就像一个模态序幕,不可能向后移动.这可能是什么错误?这甚至可以用标准的uisplitviewcontroller实现吗?我已经尝试在tabbarcontroller中嵌入navigationcontroller(在主视图中将导航控制器设置为root),然后它适用于iPhone但不适用于iPad.
我最终通过不使用 aUITabBarController来解决这个问题,而是创建了一个继承自UIViewController. 自定义控制器UITabBar在其视图底部有一个,并且UIViewController在容器视图中嵌入了多个其他的s。自定义控制器将所有嵌入式视图控制器的isHidden属性设置true为 for,除了与所选选项卡对应的视图控制器。
以下是一个带有两个选项卡的简单示例,由它们的标签标识:
class CustomTabBarController: UIViewController, UITabBarDelegate {
@IBOutlet weak var tab1View: UIView!
@IBOutlet weak var tab2View: UIView!
@IBOutlet weak var tabBar: UITabBar!
override func viewDidLoad() {
tabBar.delegate = self
}
func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
tab1View.isHidden = item.tag != 1
tab2View.isHidden = item.tag != 2
}
}
Run Code Online (Sandbox Code Playgroud)
此自定义控制器应设置为 a 的根UINavigationController,其本身应设置为 Split View Controller 的主控制器:
此设置适用于 iPad 和 iPhone:

这里有几个这种方法的缺点:
自定义选项卡控制器不太容易使用 - 添加新选项卡需要您添加另一个嵌入式视图并将其连接到控制器中的插座。
在选择选项卡时,必须在自定义选项卡栏控制器中设置导航项的标题和左右栏按钮项。
这种方法使用(我认为)比常规方法更多的内存UITabBarController,因为所有子视图控制器在应用程序加载后立即加载,而不是在它们第一次显示时加载。
当在(纵向)iPhone 模式下显示细节时,此设置将导致选项卡栏被隐藏。这是我想要的,也是 Facebook Messenger 应用程序中的行为,但如果您希望标签栏永久可见,则此方法将无法实现。
| 归档时间: |
|
| 查看次数: |
1268 次 |
| 最近记录: |