0

我想通过将工具栏滑出可见区域来切换屏幕顶部工具栏的可见性。为此,我将工具栏的 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

淡出效果很好,除非我在视图上做任何其他事情。例如,当我更新标签时,工具栏会恢复到其初始状态。我想某种内部刷新被触发并且工具栏在某处有一个过时的模型。

在此处输入图像描述

4

1 回答 1

0

解决方案:尽管我认为我之前已禁用它并删除了所有约束,但我仍然启用了使用自动布局...

感谢这一点:UIView 的 Frame 属性未在 iOS 上的动画内部分配

于 2015-04-19T19:05:11.133 回答