Its unclear to me at least, but where in the view hierarchy is the 
UINavigationBar? If it isn’t in a view that is ultimately backed by a view 
controller, then it won’t have the correct information to do its layout.

> On Nov 7, 2016, at 12:42 PM, Daniel Stenmark <dstenm...@opentable.com> wrote:
> 
> I have a UIPresentationController subclass with a UINavigationBar embedded in 
> the container view.  However, when setting the rightBarButtonItem, the 
> spacing I usually expect from the item to the screen isn't there.
> 
> http://imgur.com/LHcqhyd<http://imgur.com/a/610al>
> 
> Anyone have an idea where I might be going wrong here?  The relevant code for 
> the presentation controller is as follows:
> 
> @objc public protocol SheetPresentationControllerDelegate : class {
>    func sheetPresentationControllerWillDismiss(_ sheetPresentationController: 
> SheetPresentationController)
> }
> 
> open class SheetPresentationController: UIPresentationController {
> 
> 
> 
>    fileprivate let dimmedView: UIView = {
>        let result = UIView()
>        result.backgroundColor = .black
>        result.alpha = 0
>        result.autoresizingMask = [.flexibleWidth, .flexibleHeight]
>        return result
>    }()
> 
> 
> 
>    fileprivate let topView: UIView = {
>        let result = UIView()
>        result.backgroundColor = .white
>        return result
>    }()
> 
> 
> 
>    fileprivate let navigationBar: UINavigationBar = {
>        let result = UINavigationBar()
>        result.backgroundColor = .white
>        result.items = [UINavigationItem()]
>        return result
>    }()
> 
> 
> 
>    open var title: String? {
>        get {
>            return self.navigationBar.topItem?.title
>        }
>        set {
>            self.navigationBar.topItem?.title = newValue
>        }
>    }
> 
> 
> 
>    open var titleView: UIView? {
>        get {
>            return self.navigationBar.topItem?.titleView
>        }
>        set {
>            self.navigationBar.topItem?.titleView = newValue
>        }
>    }
> 
> 
> 
>    open weak var sheetDelegate: SheetPresentationControllerDelegate?
> 
> 
> 
>    fileprivate dynamic func dismiss(_ sender: NSObject) {
>        self.presentingViewController.dismiss(animated: true, completion: nil)
>    }
> 
> 
> 
>    override open func presentationTransitionWillBegin() {
>        super.presentationTransitionWillBegin()
> 
> 
> 
>        guard let containerView = self.containerView else {
>            return
>        }
> 
> 
> 
>        containerView.addSubview(self.dimmedView)
>        self.dimmedView.frame = CGRect(origin: .zero, size: 
> containerView.bounds.size)
> 
> 
> 
>        let gestureRecognizer = UITapGestureRecognizer(target: self, action: 
> #selector(dismiss))
>        self.dimmedView.addGestureRecognizer(gestureRecognizer)
> 
> 
> 
>        self.presentedViewController.transitionCoordinator?.animate( 
> alongsideTransition: { (context) in
>                self.dimmedView.alpha = 0.5
> 
> 
> 
>            }, completion: nil)
> 
> 
> 
>        containerView.addSubview(self.topView)
>        containerView.addSubview(self.navigationBar)
> 
> 
> 
>        self.navigationBar.topItem?.rightBarButtonItems = 
> [UIBarButtonItem(title: NSLocalizedString("Done", comment: ""), style: .done, 
> target: self, action: #selector(dismiss))]
>    }
> 
> 
> 
>    override open func dismissalTransitionWillBegin() {
>        super.dismissalTransitionWillBegin()
> 
> 
> 
>        self.sheetDelegate?.sheetPresentationControllerWillDismiss(self)
> 
> 
> 
>        self.presentedViewController.transitionCoordinator?.animate( 
> alongsideTransition: { (context) in
>            self.dimmedView.alpha = 0
> 
> 
> 
>            }, completion: nil)
>    }
> 
> 
> 
>    override open var frameOfPresentedViewInContainerView : CGRect {
>        return CGRect(x: 0, y: self.navigationBar.frame.origin.y + 
> self.navigationBar.intrinsicContentSize.height, width: 
> self.containerView?.bounds.width ?? 0, height: 
> self.presentedViewController.preferredContentSize.height)
>    }
> 
> 
> 
>    override open func containerViewWillLayoutSubviews() {
>        super.containerViewWillLayoutSubviews()
> 
> 
> 
>        self.topView.frame = CGRect(x: 0, y: 0, width: 
> self.containerView?.bounds.width ?? 0, height: 
> self.presentingViewController.topLayoutGuide.length)
>        self.navigationBar.frame = CGRect(x: 0, y: self.topView.frame.origin.y 
> + self.topView.bounds.height, width: self.containerView?.bounds.width ?? 0, 
> height: self.navigationBar.intrinsicContentSize.height)
> 
> 
> 
>        self.presentedView?.frame = self.frameOfPresentedViewInContainerView
>    }
> }
> 
> Dan
> _______________________________________________
> 
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/david.duncan%40apple.com
> 
> This email sent to david.dun...@apple.com

--
David Duncan


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to