Re: 10.13 printing problem
Re: 10.13 printing problem
- Subject: Re: 10.13 printing problem
- From: Jeremy Hughes <email@hidden>
- Date: Wed, 20 Dec 2017 02:54:28 +0000
> On 19 Dec 2017, at 18:03, Jeremy Hughes <email@hidden> wrote:
>
> I have a problem printing an autolayout view in 10.13.2, and I’m wondering if
> there is something wrong with my code or if Apple broke something in 10.13 or
> a more recent update.
>
> I’m using the same view class for printing and screen, but I have a separate
> view object for printing.
>
> I’m overriding printOperation(withSettings)
>
> This is how it works:
>
> 1. Create the view
> 2. Set up and activate constraints
> 3. Call view.layoutSubtreeIfNeeded()
> 4. Return NSPrintOperation(view: view, printInfo: printInfo)
>
> After (2) the view frame is empty.
> After (3) the view frame is set correctly in 10.12.6, but is empty in 10.13.2
>
> One difference between print and screen views is that the print view doesn’t
> have a superview, but it is constrained by its children, and I am actually
> setting its width and height explicitly:
>
> pageConstraints.append(NSLayoutConstraint(item: view, attribute: .width,
> relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0,
> constant: viewWidth))
>
> pageConstraints.append(NSLayoutConstraint(item: view, attribute: .height,
> relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0,
> constant: viewHeight))
>
> In 10.12.6, calling view.layoutSubtreeIfNeeded causes the view’s frame to be
> set to {0, 0, viewWidth, viewHeight}
> In 10.13.2 this doesn’t happen
>
> I can set the frame manually, but it seems wrong that I should have to do
> this. The consequence of the frame not being set is that nothing is printed!
It seems wrong because you’re not supposed to have to set frames if you’re
using auto layout.
> I don’t have previous versions of 10.13 that I can test on, so I don’t know
> exactly when this got broken (or changed if it isn’t actually broken).
I think this is probably a bug in 10.13 (or 10.13.2), so maybe I should just
file a bug report?
Unless someone can tell me why it isn’t a bug.
I can work around the problem by doing something like:
if view.frame.isEmpty
{
view.frame.origin = CGPoint(x: 0, y: 0)
view.frame.size = view.fittingSize
}
after calling view.layoutSubtreeIfNeeded()
Jeremy
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden