在iOS 8中,Nib加载的Subview的位置不正确

时间:2014-10-17 15:07:47

标签: ios uiview awakefromnib loadnibnamed

我有一个名为CNJobMapView的自定义类,它是UIView的子类。此自定义类从nib文件加载视图并将其添加为子视图。我这样做是为了我可以将一个UIView对象添加到一个故事板中的视图,给它CNJobMapView自定义类,当我运行该应用程序时它将出现在该视图中。

我在CNJobMapView的awakeFromNib方法中加载nib,如下所示:

-(void)awakeFromNib {
  [[NSBundle mainBundle] loadNibNamed:@"CNJobMapView" owner:self options:nil];
  [self addSubview: self.contentView];
  [self internalSetup];
}

在这种情况下,self.contentView是名为" CNJobMapView"的nib内的主视图。它与IB相关联。

在iOS 7和7.1中,这一切都正常。它看起来像是这样:

correct position

在iOS 8中,这不能正常工作。 contentView出现在完全错误的位置。像这样:

incorrect position

我不知道为什么它在iOS 8中有所不同。我希望得到一些帮助来解决这个问题!

1 个答案:

答案 0 :(得分:1)

我找到了答案!

显然在iOS 7中,它假定将contentView放在CNJobMapView中的正确约束。在iOS 8中,情况已不再如此。我修改了awakeFromNib函数,如下所示:

-(void)awakeFromNib {
  [[NSBundle mainBundle] loadNibNamed:@"CNJobMapView" owner:self options:nil];
  [self addSubview: self.contentView];
  [self internalSetup];

  NSDictionary *views = NSDictionaryOfVariableBindings(contentView);
  NSArray *horizContentConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options:0 metrics:nil views:views];
  [self addConstraints:horizContentConstraints];
  NSArray *vertContentConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|" options:0 metrics:nil views:views];
  [self addConstraints:vertContentConstraints];
}

问题现在已经解决了。