【问题标题】:UIView sidebar always on topUIView 侧边栏始终位于顶部
【发布时间】:2012-01-11 13:40:19
【问题描述】:

我正在开发一个 iPad 应用程序,我需要创建一个 UIView,它始终位于其他视图的顶部。

A 是我需要创建UIViewController 的区域(将其视为一种侧边栏),该视图始终位于顶部。相反,B 是 UIViewController(及其视图)可以更改的内容区域:根据几个按钮操作(在 A 的视图内),可以删除当前可见内容(在本例中为控制器 B 及其视图)并显示其他控制器(C、D、E 等)及其视图。

我为我的应用程序创建了所有元素,但我无法将 A 的视图保持在顶部,同时实现用于动态更改内容区域的逻辑。作为要求,我需要 A 始终与 B 重叠。换句话说,B 的一部分(左侧部分)始终位于 A 的区域下方。B 始终扩展整个设备屏幕。

你能给我一些建议吗?

我做了两个配置,但我有问题。

首次配置

在第一个中,我为 A 创建了一个UIViewController(称为SideBarController)。我将SideBarController 视图添加到UIWindow(在应用程序委托中)。然后我为 B 创建了一个UIViewController(称为HomeViewController)并将它添加为我的应用程序的rootViewController

这个解决方案可能是一个有效的解决方案,因为我可以通过我的应用程序委托动态更改内容区域(设置新的rootViewController),但SideBarController 始终保持在当前可见视图下。

第二次配置

在第二个中,我创建了一个UIViewController(称为MainViewController)并将其添加为我的应用程序的rootViewController。然后在MainViewController 中,我为A 创建了一个UIViewController(称为SideBarController),并将SideBarController 视图添加到MainViewController。然后内容区域已被填充,为 B 创建一个UIViewController(称为HomeViewController)并将其添加到MainViewController

侧边栏始终位于顶部,但我很难动态更改 MainViewController 中的内容区域。如何访问内容区域并对其进行更改?

注意我知道 UIKit 上的标准组件,但由于用户规范,我需要实现这样的解决方案。

【问题讨论】:

    标签: ios layout uiview uiviewcontroller sidebar


    【解决方案1】:

    我将首先尝试在UIPopoverController 中实现您的侧边栏。它针对此类问题设计得非常好,您可以对其进行广泛定制以满足您的 UI 需求。如果UIPopoverController 给您带来了一些问题,我会将侧边栏放在它自己的UIWindow 中并将其浮动在主窗口上。

    编辑

    就我个人而言,我自己会选择弹出框,因为它更适合此类问题。我想到的另一个想法是我过去使用过的UIView,您可以将其直接添加到UIWindow(从任何角度来看[view window] 都会让您成为主要的)。请记住,UIWindow 只是一种特殊的UIView。这个问题和UIWindow 解决方案的问题在于,您必须执行自己的旋转逻辑,如果您有自动旋转,这可能比听起来更棘手。 UIPopoverController 可以非常干净和自动地处理所有这些,如果你可以使用的话。

    如果您追求UIWindow,请参阅 View Programming Guide 的 Windows 部分:http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingWindows/CreatingWindows.html

    【讨论】:

    • 感谢您的回复。你能给我关于第二种解决方案的建议吗?怎么可能把侧边栏放在另一个UIWindow 中?我认为第一个可能很复杂。谢谢。
    • 谢谢。我不知道接下来的路。也许UIPopoverController 可能是正确的。在我看来,问题可能是无法自定义此控制器的外观。例如,在 iOS 4 中,无法自定义边框。我不知道 iOS 5 的自定义是否发生了变化。您是否有任何代码可以分享您过去使用的解决方案?谢谢。
    • 你是对的。我正在谈论的部分是在 iOS 5 (popoverBackgroundViewClass) 中添加的。这会为您留下一个附加到顶层的窗口或视图。我会在[[[view window] rootViewController] view] 中添加UIView,看看这是否适合你。如果没有,直接添加到[view window]
    • 我是否必须直接在我的应用程序委托中尝试这些解决方法?例如,我可以在applicationDidFinishLaunching: 方法中使用它们吗?如果没有,在哪里?非常感谢。
    • 您可以在任何可以访问窗口(或窗口内的任何视图)的地方使用它们。 didFinishLaunching 可能是一个方便的位置。如果您有一个特殊的子类,您也可以在根视图控制器中执行此操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多