1

对于你们大多数人来说,这应该是一个简单的问题。像所附照片一样呈现视图控制器现在在它们的顶部有一个栏(见红色箭头),表示用户可以向下滑动以关闭控制器。请帮助解决以下任何问题:

  • 这个图标的正确术语是什么?
  • 它是 swift 的 ui 工具/库的一部分还是只是一个 UIImage?
  • 有人可以提供一个关于如何实现的简单片段 - 也许它类似于下面的代码
let sampleController = SampleController()
sampleController.POSSIBLE_OPTION_TO_SHOW_BAR_ICON = true
present(sampleController, animated: true, completion: nil)

请参阅我所指的图标的红色箭头

在此处输入图像描述

4

2 回答 2

0

如果您不想做任何自定义演示并且只使用默认转换,则需要在正在呈现的视图控制器中添加此指示器。

首先要考虑的是您的视图层次结构,指示器将成为导航栏的一部分,或者您的视图可能没有导航栏 - 因此您可能需要一些代码来找到正确的视图来添加此指示器。

在我的场景中,我需要一个导航栏,因此我的视图控制器位于导航控制器中,但您可以直接在视图控制器中执行相同操作:

1:子类化导航控制器

这是可选的,但最好将所有这些自定义抽象到导航控制器中。

我检查一下是否显示了 NavigationController。这可能不是最好的检查方法,但由于这不是问题的一部分,请参考这些答案以检查视图控制器是否以模态方式呈现

class CustomNavigationController: UINavigationController {
  override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    // this checks if the ViewController is being presented
    if presentingViewController != nil {
      addModalIndicator()
    }
  }

  private func addModalIndicator() {
    let indicator = UIView()
    indicator.backgroundColor = .tertiaryLabel
    let indicatorSize = CGSize(width: 30, height: 5)
    let indicatorX = (navigationBar.frame.width - indicatorSize.width) / CGFloat(2)
    indicator.frame = CGRect(origin: CGPoint(x: indicatorX, y: 8), size: indicatorSize)
    indicator.layer.cornerRadius = indicatorSize.height / CGFloat(2.0)
    navigationBar.addSubview(indicator)
  }
}

2:呈现自定义导航控制器

let someVC = UIViewController()
let customNavigationController = CustomNavigationController()
customNavigationController.setViewControllers([stationsVC], animated: false)
present(playerNavigationController, animated: true) { }

3:这将产生以下结果 iOS Swift UIKit 模态显示关闭指示器

您可能需要根据您的场景/视图控制器层次结构在此处更改一些逻辑,但希望这能给您一些想法。

于 2021-07-15T11:52:43.933 回答
0

您要求的功能在 中不可用UIKit

您必须使用子类化实现自定义视图控制器过渡动画,UIPresentationController以呈现该上拉/下拉句柄。

UIPresentationController (developer.apple.com)

对于自定义演示,您可以提供自己的演示控制器来为呈现的视图控制器提供自定义外观。演示控制器管理任何与视图控制器及其内容分开的自定义镶边。例如,放置在视图控制器视图后面的调光视图将由表示控制器管理。苹果文档

这可以通过UIView任何图像来实现,或者如果您愿意,可以通过将子视图添加到 UIPresentationControllercontentView上方的presentedView.

要提供滑动手势以关闭/呈现,您必须实现UIPercentDrivenInteractionController.

您可以参考下面的本教程进行详细了解。

UIPresentationController 教程来自 raywenderlich.com

你应该presentationDirection = .bottom在你的情况下寻找。

对于手势驱动的解雇,您应该查看以下教程

Custom-UIViewcontroller-Transitions-入门

我希望这可以帮助你。

于 2019-10-15T04:19:01.733 回答