我有几个视图控制器,我希望所有人共享一个标题状态栏。此标题视图显示我的应用中某些内容的状态。我使用IB在其自己的xib中布置标题视图的内容,然后使用IB来布局视图控制器,在视图控制器的xib中添加占位符UIView元素,以便在我以编程方式加载标题时。
现在,当我从视图xib的内容创建一个UIView子类,并将其作为子视图添加到我的任何视图控制器的视图时,我在视图控制器xib中为标题视图指定的位置似乎被忽略,无论如何,标题视图都放在(0,0)。标题视图的所有内容加载并显示正常,它只是视图控制器中标题视图的位置错误。
以下是我如何加载标题视图并将其添加到视图控制器中:
header = [InfoHeader loadFromNib:MY_NIB_NAME withOwner:self];
[self.view addSubview:header];
视图控制器xib被确认有一个连接到'header'变量的插座。这就是'loadFromNib'方法:
+(InfoHeader *) loadFromNib: (NSString *) nibName withOwner:(id) objectOwner
{
NSBundle *b = [NSBundle mainBundle];
NSArray *nib = [b loadNibNamed:nibName owner:objectOwner options:nil];
InfoHeader *header;
for (id obj in nib)
{
if ([obj isKindOfClass:[InfoHeader class]])
{
header = (InfoHeader *) obj;
}
}
return header;
}
关于在这里查看什么的任何想法?我不想以编程方式找到标题栏,但让IB这样做。
答案 0 :(得分:1)
您是否在IB中更改了子视图的位置?通常,视图的默认位置(0,0)将是屏幕中大视图的(顶部,左侧)坐标。我认为检查一切正常
答案 1 :(得分:0)
通过以编程方式指定子视图的框架,您可以在不使用“占位符”视图的情况下执行此操作:
InfoHeader *header = [InfoHeader loadFromNib:MY_NIB_NAME withOwner:self];
header.frame = CGRectMake(0, 44, header.frame.size.width, header.frame.size.height);
[self.view addSubview:header];
(该代码说明您已从班级中删除了header
出口,因此它可以是本地变量。
或者,如果您更喜欢使用占位符(因此您可以使用IB而不是以编程方式指定标题的位置),请执行以下操作:
InfoHeader *headerView = [InfoHeader loadFromNib:MY_NIB_NAME withOwner:self];
[header addSubview:headerView];