【发布时间】:2015-09-24 01:02:09
【问题描述】:
我想将我的视图显示为屏幕右侧的一列。此应用程序仅适用于 iPad。
【问题讨论】:
-
请发布您正在进行的实施。
-
我没有,只有我想要的样子。
-
@JonathanAllenGrant 那你应该自己尝试一下,然后再在这里寻求帮助。
标签: ios swift uistoryboard
我想将我的视图显示为屏幕右侧的一列。此应用程序仅适用于 iPad。
【问题讨论】:
标签: ios swift uistoryboard
一种方法是这样创建视图控制器;从资源库中拖出一个新的视图控制器到您的故事板中,将背景颜色设置为黑色并将不透明度设置为 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.Custom 和transitioningDelegate = 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' 类型的值?”
您还可以使用完全可定制的 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 模拟器中运行它。您将在屏幕右侧查看。
希望对你有所帮助。
【讨论】: