> On 14 Sep 2015, at 11:58 am, Iain Holmes <[email protected]> wrote:
> 
>> 
>> On 14 Sep 2015, at 10:35 am, Dave <[email protected]> wrote:
>> 
>> Hi All,
>> 
>> I’m trying to add Constraints to a View in order to have it stretch to the 
>> left and right edges of the superview. This is slight complicated by it 
>> being in a ScrollView/Stack View Combo as so:
>> 
>> 
>> NSScrollView                                         Setup in NIB
>>      NSFlippedClipView                               Setup in NIB
>>              NSStackView                             Setup in NIB
>>                      LTWDetailXView          (added dynamically in code).
>> 
>> 
>> The Detail View is smaller in Width than the  NSScrollView/NSStackView and I 
>> want it to stretch to fit it.
>> 
>> I tried adding the following constraints in code as follows:
>> 
>> myDetailView = [myDetailViewController getPrimaryView];
>> [self.pValidationListStackView addView:myDetailView 
>> inGravity:NSStackViewGravityTop];
>> 
>> myConstraintsViewDictionary = [[NSMutableDictionary alloc] init];
>> [myConstraintsViewDictionary setObject:self.pValidationListStackView 
>> forKey:@"StackView"];
>> [myConstraintsViewDictionary setObject:myDetailView forKey:@"DetailView"];
>>              
>> myConstraintsArray = [NSLayoutConstraint 
>> constraintsWithVisualFormat:@"H:[StackView]-(<=1)-[DetailView]" 
>> options:NSLayoutFormatAlignAllLeft metrics:nil 
>> views:myConstraintsViewDictionary];
>> [myDetailView addConstraints:myConstraintsArray];
>>              
>> myConstraintsArray = [NSLayoutConstraint 
>> constraintsWithVisualFormat:@"H:[StackView]-(<=1)-[DetailView]" 
>> options:NSLayoutFormatAlignAllRight metrics:nil 
>> views:myConstraintsViewDictionary];
>> [myDetailView addConstraints:myConstraintsArray];
>> 
>> But I get this Error Message:
>> 
>> Unable to parse constraint format: 
>> Options mask required views to be aligned on a horizontal edge, which is not 
>> allowed for layout that is also horizontal. 
>> H:[StackView]-(<=1)-[DetailView] 
>>                               ^
>> I’m not sure what this means or if the above code is correct?
> 
> The NSLayoutFormatAlignAllLeft says that all the views mentioned in the 
> format string should be aligned along their left edges. Which isn’t possible 
> if you want them to be laid out horizontally.
> You should just use 0 for options.
> 
> However: StackView is the parent of DetailView so you should be using | as 
> the superview, so simply doing something like this should work.
> 
> myConstraintsArray = [NSLayoutConstraint 
> constraintsWithVisualFormat:@“H:|[DetailView]|" options:0 metrics:nil 
> views:myConstraintsViewDictionary];
> [myDetailView addConstraints:myConstraintsArray];
> 

In fact, with NSStackView you should just be able to set the content hugging 
priority and it’ll just work

myDetailView = [myDetailViewController getPrimaryView];
[self.pValidationListStackView addView:myDetailView 
inGravity:NSStackViewGravityTop]; // NOTE: Should this not be GravityLeading as 
you’re using a horizontal stack view?
[myDetailView setContentHuggingPriority:NSLayoutPriorityDefaultLow 
forOrientation:NSLayoutConstraintOrientationHorizontal];

and that’s all you should need.

iain
_______________________________________________

Cocoa-dev mailing list ([email protected])

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 [email protected]

Reply via email to