Retina and VFL vs Programmatic Layout

2014-07-26 Thread Luther Baker
In the following example, I'm displaying a child view in a container view
attached to a view controller's view property ... on a Retina iPhone
simulator.

EXPECTED: The VFL constraints cause the child to fill the screen whereas

UNEXPECTED: the programmatic constraints cause the child to fill exactly
1/4 of the screen (1/2 width, 1/2 height). The programmatic constraints
work if I set the multiplier=2.0 on each of those constraints.

I normally don't use width / height constraints this way but I'm surprised
by the outcome. Is this a Retina pixels/points thing or am I doing
something wrong?

Thanks,
-Luther


//
// 1. Fill the parent view with a simple, yellow container
//
_containerView = [[UIView alloc] init];
_containerView.backgroundColor = [UIColor yellowColor];
_containerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:_containerView];

NSArray *cc = [NSLayoutConstraint constraintsWithVisualFormat:@
V:|[container]|

options:NSLayoutFormatAlignAllCenterX
  metrics:nil
views:@{
@container : _containerView }];
[self.view addConstraints:cc];
cc = [NSLayoutConstraint constraintsWithVisualFormat:@H:|[container]|

options:NSLayoutFormatAlignAllCenterY
 metrics:nil
   views:@{ @container :
_containerView }];
[self.view addConstraints:cc];

//
// 2. Add a red child to the aforementioned container view
//

UIView *childView = [[UIView alloc] init];
childView.backgroundColor = [UIColor redColor];
childView.translatesAutoresizingMaskIntoConstraints = NO;
[_containerView addSubview:childView];

// WORKS AS EXPECTED

cc = [NSLayoutConstraint constraintsWithVisualFormat:@V:|[child]|

options:NSLayoutFormatAlignAllCenterX
  metrics:nil
views:@{
@child : childView }];
[_containerView addConstraints:cc];
cc = [NSLayoutConstraint constraintsWithVisualFormat:@H:|[child]|

options:NSLayoutFormatAlignAllCenterY
 metrics:nil
   views:@{ @child :
childView }];
[_containerView addConstraints:cc];

//
// now, replace the VFL from above with this and the child view only fills
1/4 of the screen
//

NSLayoutConstraint *c = [NSLayoutConstraint constraintWithItem:childView

attribute:NSLayoutAttributeWidth

relatedBy:NSLayoutRelationEqual

toItem:_containerView

attribute:NSLayoutAttributeWidth
multiplier:1.0
  constant:0.0];
[_containerView addConstraint:c];

c = [NSLayoutConstraint constraintWithItem:childView
 attribute:NSLayoutAttributeHeight
 relatedBy:NSLayoutRelationEqual
toItem:_containerView
 attribute:NSLayoutAttributeHeight
multiplier:1.0
  constant:0.0];
[_containerView addConstraint:c];
___

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

Re: Retina and VFL vs Programmatic Layout

2014-07-26 Thread Luther Baker
Ah, I forgot to add constraints to establish the origin.

Got it. Thanks,
-Luther



On Sat, Jul 26, 2014 at 10:44 AM, Luther Baker lutherba...@gmail.com
wrote:

 In the following example, I'm displaying a child view in a container view
 attached to a view controller's view property ... on a Retina iPhone
 simulator.

 EXPECTED: The VFL constraints cause the child to fill the screen whereas

 UNEXPECTED: the programmatic constraints cause the child to fill exactly
 1/4 of the screen (1/2 width, 1/2 height). The programmatic constraints
 work if I set the multiplier=2.0 on each of those constraints.

 I normally don't use width / height constraints this way but I'm surprised
 by the outcome. Is this a Retina pixels/points thing or am I doing
 something wrong?

 Thanks,
 -Luther


 //
 // 1. Fill the parent view with a simple, yellow container
 //
 _containerView = [[UIView alloc] init];
 _containerView.backgroundColor = [UIColor yellowColor];
 _containerView.translatesAutoresizingMaskIntoConstraints = NO;
 [self.view addSubview:_containerView];

 NSArray *cc = [NSLayoutConstraint constraintsWithVisualFormat:@
 V:|[container]|

 options:NSLayoutFormatAlignAllCenterX
   metrics:nil
 views:@{
 @container : _containerView }];
 [self.view addConstraints:cc];
 cc = [NSLayoutConstraint constraintsWithVisualFormat:@
 H:|[container]|

 options:NSLayoutFormatAlignAllCenterY
  metrics:nil
views:@{ @container
 : _containerView }];
 [self.view addConstraints:cc];

 //
 // 2. Add a red child to the aforementioned container view
 //

 UIView *childView = [[UIView alloc] init];
 childView.backgroundColor = [UIColor redColor];
 childView.translatesAutoresizingMaskIntoConstraints = NO;
 [_containerView addSubview:childView];

 // WORKS AS EXPECTED

 cc = [NSLayoutConstraint constraintsWithVisualFormat:@V:|[child]|

 options:NSLayoutFormatAlignAllCenterX
   metrics:nil
 views:@{
 @child : childView }];
 [_containerView addConstraints:cc];
 cc = [NSLayoutConstraint constraintsWithVisualFormat:@H:|[child]|

 options:NSLayoutFormatAlignAllCenterY
  metrics:nil
views:@{ @child :
 childView }];
 [_containerView addConstraints:cc];

 //
 // now, replace the VFL from above with this and the child view only fills
 1/4 of the screen
 //

 NSLayoutConstraint *c = [NSLayoutConstraint
 constraintWithItem:childView

 attribute:NSLayoutAttributeWidth

 relatedBy:NSLayoutRelationEqual

 toItem:_containerView

 attribute:NSLayoutAttributeWidth
 multiplier:1.0
   constant:0.0];
 [_containerView addConstraint:c];

 c = [NSLayoutConstraint constraintWithItem:childView
  attribute:NSLayoutAttributeHeight
  relatedBy:NSLayoutRelationEqual
 toItem:_containerView
  attribute:NSLayoutAttributeHeight
 multiplier:1.0
   constant:0.0];
 [_containerView addConstraint:c];


___

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