popoverpresentviewcontroller与矩形角和没有箭头

Sur*_*nde 7 iphone uipopovercontroller ios swift

我想要一个没有圆角但没有箭头的弹出窗口.

我已经完成了以下代码,但它不起作用:

//SerachPopViewController.swift

    //MARK: InitCoder
required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    //popover settings
    //popoverPresentationController!.permittedArrowDirections = .Any
    modalPresentationStyle = .Popover
    popoverPresentationController!.delegate = self
    //permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
    self.preferredContentSize = CGSize(width:340,height:380)
}
Run Code Online (Sandbox Code Playgroud)

//QueryTableViewController.swift

    @IBAction func searchFilter(sender: AnyObject) {

    let searchPopController = storyboard!.instantiateViewControllerWithIdentifier("SerachPopViewController") as! SerachPopViewController
    searchPopController.serachPopDelegate = self
    searchPopController.modalPresentationStyle = .Popover
    searchPopController.preferredContentSize = CGSize(width:340,height:380)

    let popoverPresentationController = searchPopController.popoverPresentationController

    popoverPresentationController!.sourceView = self.view;
    popoverPresentationController!.sourceRect = CGRectMake(CGRectGetMidX(self.view.bounds), CGRectGetMidY(self.view.bounds),0,0)
    popoverPresentationController!.permittedArrowDirections = UIPopoverArrowDirection();
    self.presentViewController(searchPopController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

我可以用箭头和圆形箭头显示弹出窗口视图.

请帮我实现:

  • 弹出视图与矩形角
  • 没有方向箭头的弹出视图

小智 26

使用上述概念,您还可以在完成参数中设置角半径.

斯威夫特3

let popoverViewController: UIViewController = // Some view controller to be presented in a popover

// Set popover properties here...
// i.e. popoverViewController.modalPresentationStyle = .popover

present(popoverViewController, animated: true, completion: {
     popoverViewController.view.superview?.layer.cornerRadius = 0

    // Additional code here
})
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,你的应该是公认的答案 (2认同)

小智 7

在iOS 11中,不可能使用@SHN解决方案去除圆角.在viewWillAppear之后,角半径设置为默认值.

必须在viewDidAppear方法中设置半径

override func viewDidAppear(_ animated: Bool) {
    view.superview?.layer.cornerRadius = 0
    super.viewDidAppear(animated)
}
Run Code Online (Sandbox Code Playgroud)


nac*_*o4d 3

我对shawnynicole 的回答并不是 100% 满意,因为我意识到从圆角到矩形角的变化是显着的/可见的。

所以我想出了这个:子类化视图控制器(在我的例子中它是一个UINavigationController)并覆盖viewDidLayoutSubviews和更新那里的角落。这更好,因为角变化动画不可见,并且每次需要时都会更新(旋转等)。

它适用于 iOS11,并且可能也适用于其他版本。

class PopoverNavigationController: UINavigationController {

    @IBInspectable var cornerRadius: Int = -1

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let r = CGFloat(cornerRadius)
        if r >= 0 && view.superview?.layer.cornerRadius != r {
            view.superview?.layer.cornerRadius = r
        }
    }
}
Run Code Online (Sandbox Code Playgroud)