Sorry, I mostly copied your code and moved things around. Try -setNeedsLayout instead of -layoutIfNeeded.
> On Dec 28, 2016, at 9:58 PM, Doug Hill <cocoa...@breaqz.com> wrote: > > Hello Steve, > > FWIW, I’ve tried both ways and it doesn’t seem to affect the problem I’m > having. However, Apple says to update constraints than do the animation block > with layoutIfNeeded, according to this WWDC session: > > https://developer.apple.com/videos/play/wwdc2012/228/?id=228 > <https://developer.apple.com/devcenter/download.action?path=/videos/wwdc_2012__sd/session_228__best_practices_for_mastering_auto_layout.mov> > > But in general, the SDK documentation on animating autolayout constraint > changes is borderline non-existent. > > Doug Hill > > >> On Dec 28, 2016, at 5:54 PM, Steve Christensen <puns...@mac.com >> <mailto:puns...@mac.com>> wrote: >> >> I have always put the thing that I'm animating into the animation block: >> >> - (IBAction)animateIt:(id)sender >> { >> static BOOL small = NO; >> >> small = !small; >> >> CGFloat newWidth = small ? self.view.frame.size.width / 2 : >> self.view.frame.size.width; >> >> [UIView animateWithDuration:1 animations: >> ^{ >> self.containerWidthConstraint.constant = newWidth; >> [self.view layoutIfNeeded]; >> }]; >> } >> >>> On Dec 28, 2016, at 4:14 PM, Doug Hill <cocoa...@breaqz.com >>> <mailto:cocoa...@breaqz.com>> wrote: >>> >>> Hi Ken, >>> >>> I uploaded a sample project here: >>> >>> https://github.com/djfitz/TestAutolayoutAnimations >>> <https://github.com/djfitz/TestAutolayoutAnimations> >>> >>> I tried to strip this down to what is needed to show the behavior I see. >>> >>> My code to actually do the animation is this: >>> >>> - (IBAction)animateIt:(id)sender >>> { >>> static BOOL small = NO; >>> >>> if( small ) >>> { >>> [self.view layoutIfNeeded]; >>> >>> self.containerWidthConstraint.constant = >>> self.view.frame.size.width; >>> >>> [UIView animateWithDuration:1 animations: >>> ^{ >>> [self.view layoutIfNeeded]; >>> }]; >>> } >>> else >>> { >>> [self.view layoutIfNeeded]; >>> >>> self.containerWidthConstraint.constant = >>> self.view.frame.size.width / 2; >>> >>> [UIView animateWithDuration:1 animations: >>> ^{ >>> [self.view layoutIfNeeded]; >>> }]; >>> } >>> >>> small = !small; >>> } >>> >>> 'container view' has one subview which is a UILabel. The label is pinned to >>> the superview edges via autolayout constraints. (e.g. trailing, leading, >>> top, bottom edges all pinned to superview edges.) >>> >>> I tried a few different variations, including leaving out the first >>> layoutIfNeeded (which some people say should be done, others not). >>> >>> The exact behavior is that the label will resize to the new size >>> immediately and reflow the text, then the container view will animate it's >>> size change. It would be nice if both the label and the container view >>> animate at the same time. >>> Also, as I mentioned, a button will exhibit the same behavior, probably >>> because it has a UILabel inside it to show the button text. >>> >>> Thanks again for any ideas. >>> >>> Doug Hill >>> >>> >>>> On Dec 28, 2016, at 12:50 PM, Ken Thomases <k...@codeweavers.com> wrote: >>>> >>>> On Dec 28, 2016, at 1:55 PM, Doug Hill <cocoa...@breaqz.com> wrote: >>>>> >>>>> I can now animate my constraint changes but I notice that subviews aren't >>>>> animated. For example, I have a single view with a width constraint, and >>>>> this view has a label as a subview that expands to the size of it's >>>>> parent view via edge constraints. >>>>> I can change the width constraint constant of the parent view at runtime >>>>> and it animates very well. However, the subviews jump into place >>>>> immediately then the parent view animates into place. I see the same >>>>> behavior with a button as a subview. >>>> >>>> Show exactly how you're animating the constraint changes. Are you really >>>> animating the change of the constraint or are you doing a layoutIfNeeded >>>> within an animation context? Even if the former, are you calling any >>>> methods that force layout (layoutIfNeeded or similar)? If so, where/when? >>>> >>>> Regards, >>>> Ken _______________________________________________ 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