UIToolbar setFrame不起作用

时间:2015-04-19 19:05:11

标签: ios uitoolbar uitoolbarposition

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

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

enter image description here

1 个答案:

答案 0 :(得分:0)

解决方案:我仍然启用了使用Autolayout,尽管事实上我认为我已禁用它并删除所有约束之前...

感谢您:Frame property of UIView is not getting assigned inside animation on iOS