![](/img/trans.png)
[英]How to “import” a UIView XIB into a UIViewController XIB?
[英]UIView xib in UIViewController loading issue
我有3个UIViews
(让我们称之为HeaderView
, MainView
和FooterView
)与UIButtons
, Label
,等我已经在各自设立xibs
。 我已经通过各自.h
文件中的IBOutlets
连接了元素。 在每个.m
文件的drawRect
,我编写了一些设置说明,例如设置文本的颜色,设置UIButton
的图像等。我有一个UIViewController
,它是通过按钮click事件显示的。 在此UIViewController
,我已要求loadNib
为3个方法UIViews
与指定帧。
我现在面临的问题是,没有一个元素被显示,例如,对于一个UIViews
( HeaderView
),该button
和label
所示(选中它通过ViewDebugging
),但images
或texts
未设置由于某些原因。
对不起,如果我没有正确解释,但我已经打过电话addSubview
和bringSubviewToFront
为UIButton
和Label
的UIViews
以及和它只是没有显示出来。 任何帮助都会很棒。 如果有人甚至可以将我引导到正确的方向,那将真的很有帮助。 我一直对此感到沮丧,并迷失了应该做的事情。
非常感谢您的提前帮助!
使用自动布局类检查天气。
如果是,请通过禁用它们来尝试一次。
在ViewDidAppear委托方法中添加视图以添加视图
或者,如果您不想禁用尺寸类别,则尝试单击按钮添加。
实际上,尺寸类比动态CGRectMake帧在ViewDidAppear之前具有更高的优先级。 在ViewDidAppear之后,优先级进入帧。
请尝试此操作,然后回复是否有效。
Thanks
从xib创建视图并将它们添加到视图层次结构时,必须考虑到这一点。
通常,您必须执行以下操作:
@implementation MYViewController
{
UIView *_headerView;
UIView *_mainView;
UIView *_footerView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
_headerView = [[[UINib nibWithNibName:@"HeaderView" bundle:nil] instantiateWithOwner:nil options:nil] firstObject];
_mainView = [[[UINib nibWithNibName:@"MainView" bundle:nil] instantiateWithOwner:nil options:nil] firstObject];
_footerView = [[[UINib nibWithNibName:@"FooterView" bundle:nil] instantiateWithOwner:nil options:nil] firstObject];
_headerView.translatesAutoresizingMaskIntoConstraints = NO;
_mainView.translatesAutoresizingMaskIntoConstraints = NO;
_footerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:_headerView];
[self.view addSubview:_mainView];
[self.view addSubview:_footerView];
// Set here autolayouts for _headerView, _mainView and _footerView
}
@end
另外,您可以将视图配置为IBOutlets并使用xib的文件所有者来分配视图(通过将页眉,主视图和页脚视图的每个XIB的文件所有者设置为MYViewController类,并将该视图分配给相应文件的所有者IBOutlet属性):
@implementation MYViewController
{
IBOutlet UIView *_headerView;
IBOutlet UIView *_mainView;
IBOutlet UIView *_footerView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[[UINib nibWithNibName:@"HeaderView" bundle:nil] instantiateWithOwner:self options:nil];
[[UINib nibWithNibName:@"MainView" bundle:nil] instantiateWithOwner:self options:nil];
[[UINib nibWithNibName:@"FooterView" bundle:nil] instantiateWithOwner:self options:nil];
_headerView.translatesAutoresizingMaskIntoConstraints = NO;
_mainView.translatesAutoresizingMaskIntoConstraints = NO;
_footerView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:_headerView];
[self.view addSubview:_mainView];
[self.view addSubview:_footerView];
// Set here autolayouts for _headerView, _mainView and _footerView
}
@结束
另外,检查您的自动布局/自动调整大小实现,并在视图上添加一些NSLog标志(在-awakeFromNib
方法-awakeFromNib
)以检查视图是否已加载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.