[英]xib-specified location moves on UIView load?
我有几个视图控制器,我希望所有人共享一个标题状态栏。 此标题视图显示我的应用程序中某些内容的状态。 我使用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来做。
您是否更改了IB中子视图的位置? 通常,视图的默认位置(0,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];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.