繁体   English   中英

xib指定的位置在UIView负载上移动?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM