如何从xib文件加载自定义UIView到UIViewController中的UIView?

时间:2016-06-29 06:15:36

标签: ios objective-c uiview uiviewcontroller storyboard

我创建了一个xib文件。 enter image description here

以下是代码:

#import "LoginView.h"
@implementation LoginView

-(id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code
    [self setup];
}
return self;
}

-(void) setup{
[[NSBundle mainBundle] loadNibNamed:@"LoginView" owner:self options:nil];

self.bounds = self.loginView.bounds;

[self addSubview:self.loginView];
}

现在我创建了一个视图控制器并为其添加了一个UIView。在viewWillAppear中,我正在尝试将xib文件加载到视图控制器中定义的UIView中。

-(void)viewWillAppear:(BOOL)animated{
self.containerView.layer.borderColor = [UIColor blackColor].CGColor;
self.containerView.layer.borderWidth = 2.0f;
LoginView *loginView = [[LoginView alloc] initWithFrame:CGRectMake(self.containerView.frame.origin.x,self.containerView.frame.origin.y, self.containerView.frame.size.width, self.containerView.frame.size.height)];
[self.containerView addSubview:loginView];
}

但是,xib文件超出了我定义的容器视图的UIView。我在ViewController中将containerView链接到UIView。

@property(nonatomic, weak) IBOutlet UIView *containerView;

任何人都可以帮助我为什么我得到这个输出?我需要在ViewController中的containerView中获取自定义uiview。就像文本字段和按钮应该在黑色边框内。

enter image description here

1 个答案:

答案 0 :(得分:1)

在容器视图中添加视图时,x和y应为0,0

你需要替换它:

LoginView *loginView = [[LoginView alloc] initWithFrame:CGRectMake(self.containerView.frame.origin.x,self.containerView.frame.origin.y, self.containerView.frame.size.width, self.containerView.frame.size.height)];

由此:

LoginView *loginView = [[LoginView alloc] initWithFrame:CGRectMake(0,0, self.containerView.frame.size.width, self.containerView.frame.size.height)];

希望这有帮助!