animationUIView不按预期工作
在我的应用程序中,我使用的UIView
其中包括UITableView
, Buttons
和Labels
。 它使用Storyboard
创build。 当用户点击一个导航栏button时, UIView
将从顶部到一定高度的animation出现,如果他们再次点击它,它将隐藏UIViewanimation(从该高度到顶部)。 和UIActionView
一样。
它工作正常,如果UITableView
没有logging。 但如果它有任何logging,在调用[self hideBasket]
,UIView从视图底部出现到顶部(不隐藏)。
//隐藏购物篮代码
-(void)hideBasket{ /*Finished Hiding the Basket [self.view sendSubviewToBack:_shoppingCartView]; [_shoppingCartView setHidden:YES]; _isShoppingCartSeen = NO;*/ CGRect basketFrame = _shoppingCartView.frame; basketFrame.origin.y = -basketFrame.size.height; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ _shoppingCartView.frame = basketFrame; } completion:^(BOOL finished) { // Finished Hiding the Basket //[self.view sendSubviewToBack:_shoppingCartView]; // [_shoppingCartView setHidden:YES]; _isShoppingCartSeen = NO; }];
//显示购物篮代码
-(void)showBasket{ /*[self.view bringSubviewToFront:_shoppingCartView]; [_shoppingCartView setHidden:NO]; _isShoppingCartSeen = YES;*/ CGRect basketFrame = _shoppingCartView.frame; basketFrame.origin.y = 0; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ _shoppingCartView.frame = basketFrame; } completion:^(BOOL finished) { // Finished Showing the Basket [self.view bringSubviewToFront:_shoppingCartView]; [_shoppingCartView setHidden:NO]; _isShoppingCartSeen = YES; }]; }
我在这里做错了什么?
使用自动布局,你应该animation你的约束,而不是改变对象的框架。
我嘲笑了从哪里开始使用约束的一个粗略的例子,这应该可以解决你的问题
首先你需要设置篮子视图的约束条件
每个对象必须至less有4个约束设置才能正确设置。
看下面的截图,按下我select的视图底部的约束图标来设置视图的宽度和高度,再加上左边的距离约束。
然后,您需要将空间设置为超级视图顶部,请参阅第二个屏幕截图。
将约束设置为超级视图顶部
一旦你的约束已经build立,你设置CTRL拖动顶部空间到超级查看属性到你的头文件,如下面的截图。 (你需要在视图中设置你的约束以适应你的桌子objet等),
现在,这已经build立,请用下面的代码replace你的代码,它应该工作正常
-(void)hideBasket{ self.topVerticalSpaceConstraint.constant = -312; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ [self.view layoutIfNeeded]; } completion:^(BOOL finished) { }];
}
– (无效)showBasket {
self.topVerticalSpaceConstraint.constant = 0; [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ [self.view layoutIfNeeded]; } completion:^(BOOL finished) { }];
}
请注意,我只是简单地将常量设置为我制作的虚拟视图的大小,尽pipe您当然可以将其更改为视图的大小等等。
请记住,您的每个视图/对象最好都应该设置其约束,尤其是下拉视图中的UITableview。 在UIView中设置表格的高度,宽度以及顶部和左侧的空间约束就足够了。
如果你想让你的视图在第一次加载的时候被隐藏起来,你的viewDidload将约束设置为-valueOfHeightOfBasket
我希望这有帮助。
- 服务器API层설계(1/2)
- 禁用UIPageViewController弹跳 – Swift
- 在IOS中检查事件存储中的所有事件而不检查重复事件
- jQuery Mobile固定页脚在键盘出现时正在移动
- iOS 8.4 – iboutlet不能以编程方式创build视图控制器
- Xamarin.iOS UITableView,你如何强制一个单元格更新?
- 当json包含没有键的数组时,如何检查swiftyJSON中是否存在键
- NSFetchedResultsController加上NSBatchUpdateRequest等于NSMergeConflict。 我做错了什么?
- 玩AVSpeechSynthesizer!