【发布时间】:2013-12-24 03:27:13
【问题描述】:
我有一个应用程序,其中 UINavigationBar 不适应 iOS7 定位,我不知道如何让它正确定位。
我没有使用自动布局,但附上了我遇到的问题的屏幕截图:
【问题讨论】:
标签: ios iphone ios7 uinavigationbar statusbar
我有一个应用程序,其中 UINavigationBar 不适应 iOS7 定位,我不知道如何让它正确定位。
我没有使用自动布局,但附上了我遇到的问题的屏幕截图:
【问题讨论】:
标签: ios iphone ios7 uinavigationbar statusbar
在你的视图控制器中实现 positionForBar: 方法
- (UIBarPosition)positionForBar:(id <UIBarPositioning>)bar {
return UIBarPositionTopAttached;
}
将自己设置为工具栏代表,也许你必须将你的工具栏向下移动 20 pt。
【讨论】:
iOS7上的新东西使用全屏布局,如果你想把你的导航栏放在最上面你需要这样实现UIBarPositioningDelegate:
-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
if ([bar isKindOfClass:[UINavigationBar class]]) {
return UIBarPositionTopAttached;
}
return UIBarPositionAny;
}
不要忘记将导航栏的委托分配给实现此方法的类,即
//self should be the controller that implements the above method.
myNavigationBarReference.delegate = self;
附: UINavigationBarDelegate、UIToolBarDelegate继承UIBarPositioningDelegate。
【讨论】:
-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { if ([bar isKindOfClass:[UINavigationBar class]]) { return UIBarPositionTopAttached; } return UIBarPositionAny; navbar.delegate=self; }
尝试在 viewDidLoad: 方法中添加如下代码
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
{
self.edgesForExtendedLayout = UIRectEdgeNone;
}
愿它解决您的问题。编码愉快!
【讨论】:
您可以在需要的地方以编程方式逐步采用自动布局。你是否在视图中添加了一个导航栏而不是使用导航控制器?如果是这样,您可以添加几行来解决您的问题。
id topGuide = self.topLayoutGuide;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings (topGuide, yourNavigationBar);
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[topGuide]-0-[yourNavigationBar]"
options:0
metrics:nil
views:viewsDictionary];
[self.view addConstraints:constraints];
如果不是这样,请告诉我你的实现。
【讨论】: