Sti*_*Sti 59 cocoa-touch objective-c uinavigationbar uinavigationcontroller ios
我想UINavigationBar在我的一个视图中使用自定义,这不是任何UINavigationController-hierarchy 的一部分.当我将其UINavigationBar拖入Storyboard时,它显示如下:

这个条是44像素,如果状态栏不共享这个空间就足够了.因为iOS7让我们使用整个屏幕,包括状态栏的空间,UINavigationBar应该是64px高,而不是44px.
如果我将视图连接到一个UINavigationController层次结构,那么它显示正确:

我读的地方,如果在UINavigationBar有属性barPosition:设置为UIBarPositionTopAttached,那么酒吧是64PX.然而,这是一个readonly属性.
我的搜索结果只显示了我认为是"解决方法"的问题.通过UINavigationController在此之前添加无用UIViewController,我可以假装有一个层次结构,它将自动添加UINavigationBar64px.
是否真的没有办法UINavigationBar覆盖64px 的"流氓"(没有导航控制器的帮助)?如果是这样的话,是否有任何正当理由说明原因?
(我不是说UINavigationBar默认情况下应该是64px,但是在检查器中应该有一个选项)
(我也看到人们用程序化的方式来解决这个问题.尽管这些答案有效,但我仍然需要设计故事板,考虑到这一点(差距).我想知道的是,是否可以将其设置为故事板,或者说,为什么不允许?)
use*_*713 45
您可以将属性设置barPosition为UIBarPositionTopAttached另一种方式!
落实-positionForBar:在委托类:
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
return UIBarPositionTopAttached;
}
Run Code Online (Sandbox Code Playgroud)您的导航栏顶部也必须锚定到顶部布局指南.
Lyn*_*ott 26
您可以通过编程方式更改导航栏高度:
[navBar setFrame:CGRectMake(0, 0, 320, 64)];
Run Code Online (Sandbox Code Playgroud)
编辑:正如我在评论中写的那样,你可能不得不放入这一行viewDidLayoutSubviews来规避自动布局.
joe*_*ick 10
您可以使用Interface Builder中"Identity Inspector"中的"用户定义的运行时属性"将其设置为附加到视图的顶部.设置barPosition属性.

以下是该barPosition属性的文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UIBarPositioning_Protocol/Reference/Reference.html
有一种方法可以实现这一点,无需使用UINavigationController或以编程方式设置它.只需在导航栏上将高度约束设置为您想要的任何值,在此实例中为64.
您可以通过编程方式完成相同的操作:
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:navigationBar attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1 constant:64.0f]];
Run Code Online (Sandbox Code Playgroud)
编辑:
正如@ nerdist-colony指出的那样,在使用Autolayout时,总是设置translatesAutoresizingMaskIntoConstraints为NO否则可能存在约束冲突.
| 归档时间: |
|
| 查看次数: |
65972 次 |
| 最近记录: |