如何将自定义子视图的宽度设置为没有宽度限制的父 UIView 的 1/3?

Posted

技术标签:

【中文标题】如何将自定义子视图的宽度设置为没有宽度限制的父 UIView 的 1/3?【英文标题】:How do I set width of custom subview to be 1/3rd of parent UIView which does not have width constraint? 【发布时间】:2016-09-07 06:42:05 【问题描述】:

我有一个自定义的父 UIView(比如PView),它由 Left、Right、Top 和 Bottom 约束定义。现在我想向PView 添加一个自定义子视图(比如SView),其宽度等于200 的MIN 和PView 的1/3。

我的PView 类中有updateConstraints 方法,我在其中更新SView 的位置约束。但是,我不确定如何设置它的大小,因为我没有 PView 的 widthConstraint?

【问题讨论】:

【参考方案1】:

您可以通过带有自动布局的情节提要中的比例宽度功能轻松实现此目的。

为您的 PView 提供一个与您的 superView(SView) 比例为 1:3 的比例宽度。 父视图约束

子/子视图视图约束

如何给出比例约束? 您将 ParentView 和 ChildView 设置为相等的宽度,然后双击宽度约束并设置 1:3 的比率。宽度永远是父视图的 1/3

编码方法

[self.yourview addConstraint:[NSLayoutConstraint
                              constraintWithItem:self.yourview
                              attribute:NSLayoutAttributeHeight
                              relatedBy:NSLayoutRelationEqual
                              toItem:self.yourview
                              attribute:NSLayoutAttributeWidth
                              multiplier:(self.yourview.frame.size.height / self.yourview.frame.size.width)
                              constant:0]];

【讨论】:

我正在通过代码执行此操作。使用 NSLayoutConstraint constraintWithItem: 和 NSLayout visualConstraints 时有没有办法指定 1:3? 我已经更新了这个问题。如果您能回答更新后的问题,那就太好了。【参考方案2】:

你的父视图的约束应该是这样的:top,leading,trailing,bottom

你的子视图的约束应该是这样的:top,leading,fixed height

现在选择both view 并设置equal width constraint,然后选择该约束并从attribute inspector 将其乘数更改为0.333

就是这样!

【讨论】:

我已经更新了这个问题。如果您能回答更新后的问题,那就太好了。【参考方案3】:

尝试使用以下代码

- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];
   sview. frame = CGRectMake(0,0,pview.frame/3,50);


【讨论】:

这行不通。我正在使用约束。使用带约束的框架不是一个好主意。

以上是关于如何将自定义子视图的宽度设置为没有宽度限制的父 UIView 的 1/3?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIView 插座连接到自定义子视图

如何在布局转换期间为集合视图单元格的边框宽度/颜色设置动画?

如何在界面生成器中将视图的宽度限制为设备宽度?

将视图宽度设置为组的较大视图

如何将 iFrame 的高度和宽度设置为与 WKWebView 框架相同?

WPF:将宽度(和高度)设置为百分比值