iPhone日历导航控制器

时间:2019-07-15 14:05:14

标签: ios iphone architecture

为了进一步学习,我正在尝试复制默认的iPhone Calendar导航实现。我在肖像中看到的是一个半标准的导航栏,其中在年视图中选择一个月将推动月视图,在月中的某天选择将推动日视图。

但是,更改为横向时,我们有一个分段控件而不是标题,并且标题位于左侧栏按钮的位置。我的问题有两个。

首先,当方向发生变化时,我应该如何考虑使用标题/分段控件和左栏按钮完成布局更改?

第二,采用分段控制的横向模式在幕后发生了什么?例如,如果细分为“天”是当前视图,那么选择其他细分时会发生什么?如果选择了“月”,则是否将月视图推到日视图上方?或者,是否在按周视图之前弹出了日视图?此外,切换回纵向,看来当前视图已被推到上一个视图之上。

我想我很难集中精力处理正在发生的事情,以及围绕分段控件进行切换并进行各种选择,而没有做选择。

Portrait

Landscape

1 个答案:

答案 0 :(得分:1)

首先,我不认为它是“扩展的”导航栏,而是一个附加的UIView,它设置在导航栏的正下方,并且具有相同的颜色/样式。

我认为您需要查看水平和垂直的UIContainers和Stacks。

通过这种方式,您将拥有一个UIViewController,该UIViewController控制显示一周中各天的UIView并处理动画和状态,但是在父级UIViewController中,您将拥有一个UIContainer视图,该视图将在ViewDidLoad上设置导航栏的框架,然后加载到子UIViewControllers视图中并将其设置为容器的视图。

这使您可以将逻辑分离为更小,更易于管理的UIViewController,并且可以在运行时根据设备方向不断添加或删除它们。

选中此项以获取有关UIContainers的信息:

https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html

看看如何使用堆栈:

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=2ahUKEwjgyMKX4uvjAhUKXRUIHXeGD-8QtwIwAHoECDIQAQ&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dp0X4TnK5m5o&usg=AOvVaw0xdJhCVz3BG5kI2_v7zWe6

这是另一篇关于UIContainerViews合成的精彩文章:

https://medium.com/flawless-app-stories/container-view-controllers-revisited-e076ef38853f