Ios 如何仅沿右侧显示自定义视图?
我想在屏幕右侧以列的形式显示我的视图。此应用程序仅适用于iPad 这样做的一种方法是以这种方式创建视图控制器;将新的视图控制器从资源库拖到情节提要中,将背景颜色设置为黑色,并将不透明度设置为50%。然后拖出UIView并设置其约束,使其固定在右侧。你需要以适当的方式呈现它。这通常是通过将控件从原始视图控制器中的某个按钮或其他控件拖动到新视图控制器并选择“以模式显示”来完成的 要像您发布的图片中那样重新创建效果,您不希望显示视图控制器在背景中消失。要确保显示视图控制器保持不变,可以使用自定义显示控制器。要执行此操作,请将其添加到新的视图控制器(在右侧显示视图的控制器): 现在创建一个PresentationController,它只是Ios 如何仅沿右侧显示自定义视图?,ios,swift,uistoryboard,Ios,Swift,Uistoryboard,我想在屏幕右侧以列的形式显示我的视图。此应用程序仅适用于iPad 这样做的一种方法是以这种方式创建视图控制器;将新的视图控制器从资源库拖到情节提要中,将背景颜色设置为黑色,并将不透明度设置为50%。然后拖出UIView并设置其约束,使其固定在右侧。你需要以适当的方式呈现它。这通常是通过将控件从原始视图控制器中的某个按钮或其他控件拖动到新视图控制器并选择“以模式显示”来完成的 要像您发布的图片中那样重新创建效果,您不希望显示视图控制器在背景中消失。要确保显示视图控制器保持不变,可以使用自定义显示控
UIPresentationController
的一个子类。在此PresentationController中需要实现的唯一方法是shouldRemovePresenterView()
:
向显示的(或第二个)视图控制器(包含modalPresentationStyle=UIModalPresentationStyle.Custom
和TransitionDelegate=self
的视图控制器)添加扩展名,或以其他方式遵守UIViewControllerTransitionDelegate协议:
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)
}
}
您还可以使用完全可自定义的CocoaControl: 以编程方式创建控制器:
// 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;
或者只是将情节提要控制器子类化
希望有帮助。您应该使用容器视图。将容器视图的宽度设置为与主视图的宽度成比例 现在,您可以根据需要设计视图控制器(上图中为蓝色),它将按照您的需要显示 然后在iPad模拟器中运行它。您将在屏幕的右侧看到您的视图
希望这对您有所帮助。请发布您正在进行的工作实施。我没有,只有一个我希望它看起来像什么的图像。@JonathanAllenGrant那么您应该在寻求帮助之前自己尝试一下。我如何切换容器的可见性?您能详细说明一下吗?是的,很抱歉延迟。我希望能够按一个按钮并显示容器视图,以及将容器视图从屏幕上滑开。我在这一行遇到一个错误:
TransitionDelegate=self
“无法将'EventColumnViewController'类型的值分配给'UIViewControllerTransitionDelegate'类型的值?”@JonathanAllenGrant您需要遵守UIViewControllerTransitioningDelegate
协议,或者创建一个扩展(如我答案的底部),或者只是在类声明中的超类之后添加该委托协议。我有点困惑。“演示(或第一个)视图控制器”是指我的新演示控制器、右侧视图的新视图控制器,还是右侧列后面的原始视图控制器?@JonathanAllenGrant我更新了我的答案。我写了演示视图控制器,但我指的是演示视图控制器。现在应该行了,行了!你是我今天的英雄
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)
}
}
// 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;