Re: Auto-Layout Again
Re: Auto-Layout Again
- Subject: Re: Auto-Layout Again
- From: Dave <email@hidden>
- Date: Thu, 27 Aug 2015 16:46:44 +0100
> On 27 Aug 2015, at 16:29, Ken Thomases <email@hidden> wrote:
>
> On Aug 27, 2015, at 8:41 AM, Dave <email@hidden> wrote:
>
>> I’m trying to setup a StackView inside a ScrollView, I’ve based by code on the InfoBarView and the TSInfoBarView sample Apps. Basically I have the following elements:
>>
>> LTWDetailWindowController This is the main Window Controller, the Window it controls is NOT resizable and has a size of 846 x 594.
>>
>> This is set up like so (in XCode):
>>
>> Objects
>> OtherViewController This has a outlet “disclosedView” which is hooked up to the Detail View In the VCs (see below).
>
> It's rarely appropriate to instantiate a view controller as an object in a NIB. Usually, it's instantiated in code and it loads and owns a view NIB. It is therefore represented by the File's Owner placeholder in that view NIB.
It was/is like this in the Sample App which I followed. Basically I was trying to get it to work in my App without changing too much first. Once I got it working with one VC I was going to remove it from the NIB and create it in code.
> From what you say below, you're going to want multiple instances of this view controller and the view it represents. Instantiating it once in this NIB doesn't help you achieve that. You'd have to archive and unarchive it in order to make a new instance that's faithful to the original. Much easier to put it into a NIB of its own and instantiate an instance of the controller and have that load its NIB.
See comment above.
>
>>
>> DetailWindow
>> View
>> WindowHeaderView
>> ImageView
>> TextView -Setup with string data from Dictionary
>> DetailScrollView (NSScrollView)
>> Flipped Clip View
>> View
>> Scroller
>> Scalar
>> Button1
>> Button2
>>
>> DetailView
>> TextView1 -Setup with string data from Dictionary
>> Left Button
>> Right Button
>
>> The LTWDetailWindowController get instantiated, it gets an Array of Dictionaries from the Data Model. For each dictionary in the Array I want to add a OtherViewController instance to the StackView and then add the StackView to the DetailScrollView. When this happens I want the StackView and whatever it contains to auto-magically resize to fit the DetailScrollView Container Size.
>
> You want the stack view to size itself to match the scroll view? Why? That would mean that the scroll view would never scroll, defeating the purpose of its existence.
Sorry match the width, the width is fixed and the horizontal scroller is disabled, I only want vertical scrolling.
> The stack view should size itself to its content and, if that's too big to show all at once in the scroll view, the scroll view should allow it to scroll.
See above, I want the StackView to grow vertically but not Horizontally.
>
> The document view of the scroll view should be the stack view itself. Your diagram above just shows a plain view. You _can_ do that, but then you have to manually add the stack view as that view's subview and add constraints to make their edges coincide. That's not hard, but is harder than necessary.
Not sure what you mean, I have a ScrollView, I create the StackView in code, add the one (for this test) DetailView to the StackView and then add the StackView to the Scroll view. When I have multiple DetailViews, I will create multiple VCs, add the Views to the StackView and then add the StackView (containing all the detail views) to the Scroll view. When this happens I want to to expand the details Views to fit the StackView and have it scroll in Y if the number of DetailViews warrants it.
>
> I recommend that you just make the stack view the document view and then dynamically add your detail views to the stack view. That will largely automate everything for you.
>
>> I decided to start at the top level (maybe a mistake), so I select the DetailView in the Window Controllers NIB and then click the Add New Constraints button at the bottom of the NIB window but I can’t select anything in the popup? The same is true for the Alignment. Why is this? My confusion is that surely I need to somehow tell it that DetailView that it needs to change size to fit it’s superview?
>
> First, if the detail view is going to go in a stack view, you should not attempt to add any constraints between it and the stack view (its eventual superview).
>
> In any case, you can't add constraints between a top-level view in a NIB and its _eventual_ superview. You can only add constraints to an _actual_ superview, which of course implies that the view isn't top-level. First, a top-level view is expected to be (potentially) placed in various different contexts by different controllers and it would be up to those controllers to decide how it should fit into those contexts. Also, constraints can't be added/activated if the views involved are not all in the same view hierarchy. And when they are added, they are added to the common ancestor of all of the involved views. So, such constraints as you're imagining would have nowhere to be between the time the NIB is loaded and when it's added to a superview.
I’ll re-read what this again tomorrow - my head hurts now!
Thanks a lot for trying to help.
All the Best
Dave
_______________________________________________
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