Ok, this is more good information to keep in mind when designing autolayout 
constraints. Given that my design isn't animatable, it's back to the autolayout 
drawing board. Again.

Doug Hill


> On Dec 14, 2016, at 3:07 PM, Gary L. Wade <garyw...@desisoftsystems.com> 
> wrote:
> 
> Right, activate and deactivate are not animatable, but the constant values in 
> constraints are.
> 
> True, it depends on what you’re showing as to whether to shrink or move your 
> view.  When I wanted to use a search bar in UISearchController with a 
> collection view in iOS to appear similarly as UITableView, I moved the search 
> bar:
> 
> https://whatweretheythinkingblog.wordpress.com/2016/11/19/effectively-using-uisearchcontroller-with-uicollectionview/
>  
> <https://whatweretheythinkingblog.wordpress.com/2016/11/19/effectively-using-uisearchcontroller-with-uicollectionview/>
> 
> When I wanted to show an icon to the left of a title, where the item may not 
> have an icon but was only available through a REST call, I found it more 
> attractive to grow the icon and compress the title in that animation, 
> choosing a scale-to-fill option, when I determined there was an icon.
> --
> Gary L. Wade
> http://www.garywade.com/ <http://www.garywade.com/>
>> On Dec 14, 2016, at 2:52 PM, Doug Hill <cocoa...@breaqz.com 
>> <mailto:cocoa...@breaqz.com>> wrote:
>> 
>> Gary,
>> 
>> Thanks for the reply.
>> I tried moving the container rather than resizing to 0 because there's a 
>> table inside this view and it will relayout when resizing. For an animation, 
>> I guess it depends on what effect you want: either seeing the view move or 
>> resize to 0.
>> 
>> Oddly, when I put my code to activate/deactivate constraints inside a 
>> [UIView animateWithDuration…] I get no animation. :(
>> 
>> Doug Hill
>> 
>>> On Dec 14, 2016, at 2:49 PM, Gary L. Wade <garyw...@desisoftsystems.com 
>>> <mailto:garyw...@desisoftsystems.com>> wrote:
>>> 
>>> If I understand you correctly, you might prefer the approach I chose to do. 
>>>  Rather than activating and deactivating constraints (BTW, you should 
>>> always deactivate before having multiple actives), set your constraints up 
>>> to always be active but change the width for the one you’re hiding to 0 and 
>>> the other to be the extra size needed to fill the gap.  I also chose to 
>>> animate the constant values, so the size-change is smooth to the user.
>>> --
>>> Gary L. Wade
>>> http://www.garywade.com/ <http://www.garywade.com/>
>>>> On Dec 14, 2016, at 2:19 PM, Doug Hill <cocoa...@breaqz.com 
>>>> <mailto:cocoa...@breaqz.com>> wrote:
>>>> 
>>>> I'm seeing warnings in the console when I dynamically make autolayout 
>>>> constraints active/inactive at runtime.
>>>> 
>>>> I have two constraints that align a container view leading or trailing 
>>>> edge with another view's edge. This is to move the container onscreen or 
>>>> offscreen. I have another view whose trailing edge aligns with the leading 
>>>> edge of the first container view so it moves with it as autolayout 
>>>> constraints change.
>>>> 
>>>> At runtime, I make one of these constraints active and the other inactive, 
>>>> like so:
>>>> 
>>>> - (IBAction)toggleCommentsVisibility:(id)sender
>>>> {
>>>>    self.commentsAreHidden ? [self showComments:self] : [self 
>>>> hideComments:self]; 
>>>> }
>>>> 
>>>> - (IBAction)showComments:(id)sender
>>>> {
>>>>    self.showCommentsConstraint.active = YES;
>>>>    self.hideCommentsContainerConstraint.active = NO;
>>>> 
>>>>    self.commentsAreHidden = NO;
>>>> }
>>>> 
>>>> - (IBAction)hideComments:(id)sender
>>>> {
>>>>    self.showCommentsConstraint.active = NO;
>>>>    self.hideCommentsContainerConstraint.active = YES;
>>>> 
>>>>    self.commentsAreHidden = YES;
>>>> }
>>>> 
>>>> When I call showComments, I get the following warning in the console:
>>>> 
>>>> =====
>>>> 
>>>> Unable to simultaneously satisfy constraints.
>>>> Probably at least one of the constraints in the following list is one you 
>>>> don't want. 
>>>> Try this: 
>>>>    (1) look at each constraint and try to figure out which you don't 
>>>> expect; 
>>>>    (2) find the code that added the unwanted constraint or constraints and 
>>>> fix it. 
>>>> (
>>>>    "<NSLayoutConstraint:0x7f91426a3ef0 'CommentContainerProportionalWidth' 
>>>> UIView:0x7f91426d9db0.width == 0.33*UIView:0x7f91426def30.width>",
>>>>    "<NSLayoutConstraint:0x7f91426c91e0 'Hide Comments Constraint' 
>>>> H:[UIView:0x7f91426d7f00]-(0)-[UIView:0x7f91426d9db0]>",
>>>>    "<NSLayoutConstraint:0x7f91426e2990 'ShowComments' 
>>>> UIView:0x7f91426d9db0.trailing == UIView:0x7f91426d7f00.trailing>",
>>>>    "<NSLayoutConstraint:0x7f91427e43c0 'UIView-Encapsulated-Layout-Width' 
>>>> H:[UIView:0x7f91426def30(768)]>"
>>>> )
>>>> 
>>>> Will attempt to recover by breaking constraint 
>>>> <NSLayoutConstraint:0x7f91426c91e0 'Hide Comments Constraint' 
>>>> H:[UIView:0x7f91426d7f00]-(0)-[UIView:0x7f91426d9db0]>
>>>> 
>>>> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to 
>>>> catch this in the debugger.
>>>> 
>>>> =====
>>>> 
>>>> This is puzzling because IB doesn't give me any autolayout errors/warning 
>>>> when I manually activate/deactivate these constraints. Also, I don't get 
>>>> this runtime warning when calling hideComments, only the 'show' case. 
>>>> Finally, things actually work at runtime because it's nice enough to 
>>>> "break" the constraint that I deactivated in code. But I would like to not 
>>>> have these warnings.
>>>> 
>>>> Any ideas on what's going on how I might go about debugging this?
>>>> 
>>>> Doug Hill

_______________________________________________

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

Reply via email to