如何在 UIView 子视图中应用自动布局 NIB 实例

Posted

技术标签:

【中文标题】如何在 UIView 子视图中应用自动布局 NIB 实例【英文标题】:How to apply autolayout NIB instance within UIView subviews 【发布时间】:2015-11-30 20:54:52 【问题描述】:

我有一个 UIViewController 实例,名为:MainController。在这个 MainController.view 中,我有另一个视图(类名为 SlideViewContent),它有一个 nib 实例:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"SlideMenuView"
                                                     owner:self
                                                   options:nil];
self.bottomSlideMenu = [nibContents objectAtIndex:0];
self.bottomSlideMenu.frame = CGRectMake(0,0,screenWidth,screenHeight);
self.bottomSlideMenu.bounds = CGRectMake(0,0,screenWidth,screenHeight);

所有自动布局约束都已添加到 nibFile 中,并且可以正常工作,没有任何警告。我想对此应用自动布局并调用这些方法来刷新具有良好屏幕尺寸的 UI:

[self setNeedsDisplay] or [self setNeedsLayout];

但是什么都行不通!

【问题讨论】:

[self layoutIfNeeded] 怎么样? 【参考方案1】:

不需要实现 [self setNeedsDisplay] 或 [self setNeedsLayout];

只需实现 layoutSubviews 并设置视图的框架。

- (void)layoutSubviews
  
    CGRect screenBound = [[UIScreen mainScreen] bounds];
    CGSize screenSize = screenBound.size;
    CGFloat screenWidth = screenSize.width;
    CGFloat screenHeight = screenSize.height;

    self.bottomSlideMenu.frame = CGRectMake(0,0,screenWidth,screenHeight);

【讨论】:

以上是关于如何在 UIView 子视图中应用自动布局 NIB 实例的主要内容,如果未能解决你的问题,请参考以下文章

将子类 UIView 添加到具有自动布局约束的 Nib

如何在加载了 nib 文件的 UIView 中调整子视图的大小

加载另一个 Nib 时的 iOS 自动布局

为 StoryBoard 中 ViewController 中使用的 UIView 加载 Nib

自动布局:如何隐藏包含子视图的 UIView?

如果在自动布局中删除子视图,则重新排列 UIView 子视图