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