Re: Help: NSScrollView is resizing its documentView down to (0, 0)
Re: Help: NSScrollView is resizing its documentView down to (0, 0)
- Subject: Re: Help: NSScrollView is resizing its documentView down to (0, 0)
- From: Roland King <email@hidden>
- Date: Wed, 06 May 2015 08:54:17 +0800
We did this a few months ago
When you embed in a scrollview you end up with
NSScrollView
NSClipView
Your View
Constrain the scrollview to something above it if it needs it, if it’s the whole window, probably doesn’t.
Constrain the clipview to all 4 sides of the scrollview.
Constrain your view to the top, right and left of the clipview but not the bottom.
Override the clipview and return isFlipped=YES
> On 6 May 2015, at 00:26, Jens Alfke <email@hidden> wrote:
>
> I haven't done much AppKit work in a while. Right now I have a small app where I'm trying to do something very simple: put a custom NSView in a window and make it scrollable. The view determines its own frame size based on the content it needs to display. So all I did was create a new window in IB, add an instance of my view, embed it in an NSScrollView, and set up default constraints for the scroll view so it'll track the window size.
>
> It sort of works as long as the window is bigger than my custom view (although the view is pinned to the bottom of the window instead of the top for some reason.) But as soon as I resize the window to a height smaller than the custom view's, the view disappears and never comes back.
>
> I added an override of -setFrame: and found that my view's frame is being set to (0, 0, 0, 0) by AppKit while redisplaying the window. I have no idea why this is happening — it probably has something to do with constraints, but I don't understand constraints well enough to know why (and I can't find any clear documentation about how to use constraints with scroll views.) How can I fix this?
>
> (OS X 10.10.4, Xcode 6.3.)
>
> —Jens
>
> * thread #1: tid = 0x691af4, 0x0000000100005c08 Hops`-[RevTreeView setFrame:](self=0x0000610000141600, _cmd=0x00007fff8b0c9343, frame=(origin = (x = 0, y = 0), size = (width = 0, height = 0))) + 24 at RevTreeView.m:70, queue = 'com.apple.main-thread', stop reason = breakpoint 3.1
> * frame #0: 0x0000000100005c08 Hops`-[RevTreeView setFrame:](self=0x0000610000141600, _cmd=0x00007fff8b0c9343, frame=(origin = (x = 0, y = 0), size = (width = 0, height = 0))) + 24 at RevTreeView.m:70
> frame #1: 0x00007fff9564628f AppKit`-[NSView resizeWithOldSuperviewSize:] + 694
> frame #2: 0x00007fff9574ce05 AppKit`-[NSView layoutSubtreeIfNeeded] + 810
> frame #3: 0x00007fff95656e66 AppKit`-[NSView _sendViewWillDrawInRect:clipRootView:] + 47
> frame #4: 0x00007fff957fad04 AppKit`-[NSView displayRectIgnoringOpacity:inContext:] + 362
> frame #5: 0x00007fff959354cd AppKit`-[_NSMirrorDocumentView drawRect:] + 265
> frame #6: 0x00007fff95676859 AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:] + 1186
> frame #7: 0x00007fff95676278 AppKit`__46-[NSView(NSLayerKitGlue) drawLayer:inContext:]_block_invoke + 218
> frame #8: 0x00007fff95675f21 AppKit`-[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 2407
> frame #9: 0x00007fff956755a3 AppKit`-[NSView(NSLayerKitGlue) drawLayer:inContext:] + 108
> frame #10: 0x00007fff958296c6 AppKit`-[_NSBackingLayerContents drawLayer:inContext:] + 145
> frame #11: 0x00007fff8a669ce7 QuartzCore`-[CALayer drawInContext:] + 119
> frame #12: 0x00007fff958291fe AppKit`-[_NSTiledLayer drawTile:inContext:] + 625
> frame #13: 0x00007fff95828f2f AppKit`-[_NSTiledLayerContents drawLayer:inContext:] + 169
> frame #14: 0x00007fff8a669ce7 QuartzCore`-[CALayer drawInContext:] + 119
> frame #15: 0x00007fff95828e70 AppKit`-[NSTileLayer drawInContext:] + 169
> frame #16: 0x00007fff8a6683c7 QuartzCore`CABackingStoreUpdate_ + 3306
> frame #17: 0x00007fff8a6676d7 QuartzCore`___ZN2CA5Layer8display_Ev_block_invoke + 59
> frame #18: 0x00007fff8a667694 QuartzCore`x_blame_allocations + 81
> frame #19: 0x00007fff8a65b43c QuartzCore`CA::Layer::display_() + 1546
> frame #20: 0x00007fff95828d87 AppKit`-[NSTileLayer display] + 119
> frame #21: 0x00007fff956c2df4 AppKit`-[_NSTiledLayerContents update:] + 5688
> frame #22: 0x00007fff956c14c7 AppKit`-[_NSTiledLayer display] + 375
> frame #23: 0x00007fff8a6597fd QuartzCore`CA::Layer::display_if_needed(CA::Transaction*) + 603
> frame #24: 0x00007fff8a658e81 QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 35
> frame #25: 0x00007fff8a658612 QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 242
> frame #26: 0x00007fff8a6583ae QuartzCore`CA::Transaction::commit() + 390
> frame #27: 0x00007fff9564eae6 AppKit`-[NSWindow _setFrameCommon:display:stashSize:] + 3771
> frame #28: 0x00007fff95937e73 AppKit`-[NSWindow(NSWindowResizing) _resizeWithEvent:] + 1469
> frame #29: 0x00007fff957dd47c AppKit`-[NSTitledFrame mouseDown:] + 200
> frame #30: 0x00007fff957dd3ab AppKit`-[NSThemeFrame mouseDown:] + 68
> frame #31: 0x00007fff95d4d2fc AppKit`-[NSWindow _reallySendEvent:isDelayedEvent:] + 14125
> frame #32: 0x00007fff956dcd76 AppKit`-[NSWindow sendEvent:] + 470
> frame #33: 0x00007fff956d9312 AppKit`-[NSApplication sendEvent:] + 2504
> frame #34: 0x00007fff95602c68 AppKit`-[NSApplication run] + 711
> frame #35: 0x00007fff9557f354 AppKit`NSApplicationMain + 1832
> frame #36: 0x0000000100003732 Hops`main(argc=3, argv=0x00007fff5fbff930) + 34 at main.m:12
> frame #37: 0x00007fff982285c9 libdyld.dylib`start + 1
>
> ______________________
_______________________________________________
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