我希望通过将其滑出可见区域来切换屏幕顶部工具栏的可见性。为此,我将工具栏的y坐标和高度存储在viewDidLoad上,并在我希望它淡入/淡出时相应地更新它。
相关的代码段看起来像这样(您还可以在https://github.com/Duffycola/test/tree/master/TestHideToolbar找到示例项目):
@interface ViewController ()
@property (nonatomic, weak) IBOutlet UIToolbar* toolbar;
@property (nonatomic, assign) BOOL toolbarVisible;
@property (nonatomic, assign) float toolbarOriginY;
@end
@implementation ViewController
- (void)viewDidLoad;
{
[super viewDidLoad];
self.toolbarVisible = YES;
self.toolbarOriginY = self.toolbar.frame.origin.y;
}
- (IBAction)handleToggleToolbar:(id)sender;
{
self.toolbarVisible = !self.toolbarVisible;
[UIView animateWithDuration:0.5 animations:^{
CGRect toolbarFrame = self.toolbar.frame;
if (self.toolbarVisible)
{
toolbarFrame.origin.y = self.toolbarOriginY;
}
else
{
toolbarFrame.origin.y = self.toolbarOriginY - self.toolbar.frame.size.height;
}
self.toolbar.frame = toolbarFrame;
}];
}
@end
淡出效果很好,除非我在视图上做任何其他事情。例如,当我更新标签时,工具栏会快速恢复到其初始状态。我想某种内部刷新被触发,工具栏在某处有一个过时的模型。
答案 0 :(得分:0)
解决方案:我仍然启用了使用Autolayout,尽管事实上我认为我已禁用它并删除所有约束之前...
感谢您:Frame property of UIView is not getting assigned inside animation on iOS