在隐藏/显示导航栏上查看框架更改?

时间:2011-10-15 05:41:09

标签: ios objective-c iphone cocoa-touch uinavigationcontroller

在我的应用程序中,

我有带根视图控制器的导航控制器。

显示/隐藏工作正常的导航栏。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    BOOL navbarhide=[self.navigationController.navigationBar isHidden];
    [self.navigationController setNavigationBarHidden:!navbarhide animated:YES];


}

效果不错,

隐藏导航栏后,查看框架更改。

当导航栏未隐藏时,视图框会发生变化。

When navigation bar is not hidden ..see the press button and view's origin is below the bar, I dont want like this I want it to stick at navigation bar's origin[at the top of the page]

It is fine view is at its original position when bar is hidden. I want view to be stick  at this position and turn bar hide/show without changing the view's frame.

提前致谢...

编辑设置set self.view.frame没有任何效果。

7 个答案:

答案 0 :(得分:11)

我有同样的问题。在我的项目中,这是因为视图是滚动视图。如果您的视图是滚动视图或表格视图,您可以尝试:

我将以下代码添加到控制器中。

self.automaticallyAdjustsScrollViewInsets = NO;

希望它可以帮到你。

答案 1 :(得分:3)

您无法更改self.view的框架。我不使用setNavigationBarHidden:隐藏导航栏,而是直接更改self.navigationController.navigationBar的框架。这样,self.view.frame就不会改变。

CGRect frame = (navBarhidden) ? CGRectMake(0, -24,self.view.bounds.size.width,44) :      CGRectMake(0, 20,self.view.bounds.size.width,44);
self.navigationController.navigationBar.frame = frame;

答案 2 :(得分:2)

我在显示UIView全屏时遇到了这个问题。调整框架对我有用。 (SWIFT)

隐藏navigationBar:

    self.navigationController!.navigationBar.hidden = true
    self.view.frame.origin.y -= 64
    self.view.frame.size.height += 64.0

再次显示navigationBar:

    self.navigationController!.navigationBar.hidden = false
    self.view.frame.origin.y += 64
    self.view.frame.size.height -= 64.0

答案 3 :(得分:0)

我认为这是默认功能,您无法更改,但您可以使用以下代码更改按钮的位置

myButton.frame = CGRectMake(X,Y,Height,Width);

隐藏导航栏后

答案 4 :(得分:0)

我认为这可能会对你有所帮助

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 {
BOOL navbarhide=[self.navigationController.navigationBar isHidden];
[self.navigationController setNavigationBarHidden:!navbarhide animated:YES];
 if(navbarhide)
 self.view.frame=CGRectMake(0,0, 320, 480);
 else
  self.view.frame=CGRectMake(0,44, 320, 480);
 }

答案 5 :(得分:0)

在显示和隐藏导航栏时更改self.view.frame

答案 6 :(得分:0)

scrollView.contentInsetAdjustmentBehavior = .never