【问题标题】:How do I present a custom view only along the right? [closed]如何仅在右侧显示自定义视图? [关闭]
【发布时间】:2015-09-24 01:02:09
【问题描述】:

我想将我的视图显示为屏幕右侧的一列。此应用程序仅适用于 iPad。

【问题讨论】:

  • 请发布您正在进行的实施。
  • 我没有,只有我想要的样子。
  • @JonathanAllenGrant 那你应该自己尝试一下,然后再在这里寻求帮助。

标签: ios swift uistoryboard


【解决方案1】:

一种方法是这样创建视图控制器;从资源库中拖出一个新的视图控制器到您的故事板中,将背景颜色设置为黑色并将不透明度设置为 50%。然后拖出一个 UIView 并设置它的约束,使其固定在右侧。您需要以模态方式呈现它。这通常通过从原始视图控制器中的某个按钮或其他控件拖动到新视图控制器并选择“模态显示”来完成。

要重新创建您发布的图片中的效果,您不希望呈现的视图控制器在后台消失。为了确保呈现视图控制器保持不变,您可以使用自定义呈现控制器。为此,请将其添加到您的新视图控制器(在右侧显示视图的控制器):

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    modalPresentationStyle = UIModalPresentationStyle.Custom
    transitioningDelegate = self
}

现在创建一个 PresentationController,它只是 UIPresentationController 的一个子类。您需要在此 PresentationController 中实现的唯一方法是 shouldRemovePresentersView()

override func shouldRemovePresentersView() -> Bool {
    return false
}

向呈现的(或第二个)视图控制器(包含modalPresentationStyle = UIModalPresentationStyle.CustomtransitioningDelegate = self)添加扩展或以其他方式符合 UIViewControllerTransitioningDelegate 协议:

extension YourViewController: UIViewControllerTransitioningDelegate {

    // Need this presentation controller so that view controller in background
    // isn't deallocated and therefore appears through the background.
    func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController!, sourceViewController source: UIViewController) -> UIPresentationController? {
        return YourPresentationControllersName(presentedViewController: presented, presentingViewController: presenting)
    }

}

【讨论】:

  • 这一行出现错误:transitioningDelegate = self“无法将 'EventColumnViewController' 类型的值分配给 'UIViewControllerTransitioningDelegate' 类型的值?”
  • 我有点困惑。 “呈现(或第一个)视图控制器”是指我的新 PresentationController、右侧视图的新 ViewController,还是右侧列后面的原始视图控制器?
  • @JonathanAllenGrant 我更新了我的答案。我编写了呈现视图控制器,但我指的是presented 视图控制器。它现在应该可以工作了。
  • 有效!今天你是我的英雄
【解决方案2】:

您还可以使用完全可定制的 CocoaControl:

REFrostedViewController

以编程方式创建控制器:

// Create content and menu controllers
//
DEMONavigationController *navigationController = [[DEMONavigationController alloc] initWithRootViewController:[[DEMOHomeViewController alloc] init]];
DEMOMenuViewController *menuController = [[DEMOMenuViewController alloc] initWithStyle:UITableViewStylePlain];

// Create frosted view controller
//
REFrostedViewController *frostedViewController = [[REFrostedViewController alloc] initWithContentViewController:navigationController menuViewController:menuController];
frostedViewController.direction = REFrostedViewControllerDirectionLeft;

// Make it a root controller
//
self.window.rootViewController = frostedViewController;

或者只是将故事板控制器子类化。

希望对你有帮助。

【讨论】:

    【解决方案3】:

    您应该使用容器视图。将容器视图的宽度设置为与主视图的宽度成比例。

    现在您可以根据需要设计视图控制器(上图中为蓝色),它将按您的意愿显示。

    然后在 iPad 模拟器中运行它。您将在屏幕右侧查看。

    希望对你有所帮助。

    【讨论】:

    • 如何切换容器的可见性?
    • 你能详细说明一下吗?
    • 是的,抱歉耽搁了。我希望能够按下按钮并显示容器视图,以及将容器视图从屏幕上滑开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多