【问题标题】:iOS Auto layout - injected custom view grow in width according to orientationiOS自动布局 - 注入的自定义视图根据方向增加宽度
【发布时间】:2023-03-21 19:29:01
【问题描述】:

我有一个主页视图设置。在此我有一个设置到插座的子视图。通过这个出口,我将一个单独的 xib 文件注入到页面中。

我可以在这个注入的 xib 上设置哪些属性,以便它随着设备方向增长/收缩?直接在主视图中的子视图可以增长和缩小,但是这个子视图的注入内容似乎总是固定的宽度。如何使它们扩展,即覆盖横向的红色区域?

注意我是一名设计师,使用界面生成器来创建它。我将不胜感激允许我通过接口构建器解决此问题的答案。如果没有,那么欢迎使用代码答案(仅作为最后的手段)。

查看显示设置的图表:

【问题讨论】:

  • 您是否为两个 xib 启用了自动布局?
  • 您使用的是故事板还是两个 .xib 文件?
  • 我正在使用 2 个 .xib 文件,并且它们都检查了自动布局

标签: ios xcode interface-builder autolayout


【解决方案1】:

我很确定我认为当前的 blueView 不了解其父视图是正确的,因此您无法在 xib 本身中设置约束,需要在代码中进行。

要使用代码来实现,假设 redView 是上图中红色视图的 Iboutlet。

使用您的 nib 创建您的 blueView,但确保 translatesAutoresizingMaskIntoConstraints 等于 no:

    CustomView *blueView = [CustonView alloc] init]; // or what not
    // atached the xib, should really be done in init of CustomView
    NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"myXib" owner:self options:nil];
    UIView *mainView = [subviewArray objectAtIndex:0];
    [blueView addSubview:mainView];


    blueView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.redview addSubview:blueView]

添加约束:

    [self.redView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[blueView]|" options:0 metrics:nil views:@{@"blueView":blueView}]];
    [self.redView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[blueView]|" options:0 metrics:nil views:@{@"blueView":blueView}]];

Booranger

【讨论】:

    【解决方案2】:

    如果redView只有blueSubView,那么你可以如下访问它

    UIView *blueView = [redView SubViews]ObjectAtIndex:0];
    
    now you canset the frame of blueSubView.
    
    [blueView setframe:CGRectMake(100,100,100,100)];
    

    希望这对你有帮助。

    【讨论】:

    • 可以通过interface builder实现吗?
    • 我认为是的..但我不确定因为我通常会以编程方式进行所有操作...这是小代码..你可以试试...!
    • 如果你使用自动布局的概念,比如设置一个框架,应该避免。
    • @Andrea 正确我正在使用自动布局,如果可能的话,我试图避免设置特定的“原点”或“维度” - 似乎这个答案违背了自动布局的描述性概念
    • @DaveHaigh 我认为这不能使用 IB 来完成,或者至少不能在 xcode 的最新版本中完成。对于我所理解的,您希望视图大小根据其超级视图进行更改。这可以通过添加约束使用自动布局来完成,BooRanger 的响应似乎是最正确的。
    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2017-11-08
    相关资源
    最近更新 更多