当前位置: 首页 > 知识库问答 >
问题:

UIView上的固定高度约束

后学
2023-03-14

我在布局中有一个UIView,以便进行一些剪切和分组,但是自动布局会在收缩时调整其大小。我想给它一个固定的高度,但唯一的选择是设置顶部和底部空间。

有没有办法设置明确的高度约束?

共有3个答案

范建华
2023-03-14
  1. 在Interface Builder左侧的检查器中选择视图
  2. Ctrl键将一条线从视图拖到其自身

=

赫连心思
2023-03-14

是和否。在自动布局中,您不能为UIView的大小设置约束,但是您可以防止UIView被“压缩”超过其内在大小。

这将有效地约束视图,同时避免父视图强制子视图具有特定大小的危险(从而删除自动布局的“自动”部分)。

要设置这些优先级,请使用:setContentCompressionResistancePriority:forAxis:

从Apple UIView文档:

定义视图应根据其内容在创建时为两个方向设置默认值,通常为NSLayoutPriorityDefaultLow或NSLayoutPriorityDefaultHigh。创建用户界面时,如果总体布局设计需要与界面中使用的视图的自然优先级不同的权衡,布局设计师可以修改特定视图的这些优先级。

子类不应重写此方法。

好了,现在我们知道如何分配优先级以避免视图小于其固有大小,但是我们如何设置固有大小呢?

好吧,如果您使用的是标准UI元素,那么您已经设置好了!但如果您的UIView是自定义的,则需要重写(CGSize)intrinsicContentSize以返回正确的大小。在这里,您可以测量视图必须计算正确尺寸的任何子视图,或者如果您使用的是艺术品/恒定大小的元素,则可以返回硬编码值。

同样,从Apple UIView文档:

自定义视图通常会显示布局系统不知道的内容。重写此方法允许自定义视图根据其内容与布局系统通信它希望的大小。这个固有的大小必须独立于内容框架,因为例如,无法根据更改的高度将更改的宽度动态地传递给布局系统。

苹果强烈建议不要检查UIView之外的任何内容(比如获取超级视图的大小并进行调整),因为这不是AutoLayout的目的(并且可能会导致严重的麻烦)。

韦熙云
2023-03-14

我刚刚找到了这个答案(自动布局约束:如何使视图在调整大小时保持其宽度/高度比?)。我的实现是这样的:

- (void)awakeFromNib
{
    [super awakeFromNib];

    NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self
                                                            attribute:NSLayoutAttributeHeight
                                                            relatedBy:NSLayoutRelationEqual
                                                               toItem:nil
                                                            attribute:NSLayoutAttributeNotAnAttribute
                                                           multiplier:1
                                                             constant:self.frame.size.height];
    [self addConstraint:con1];
}
 类似资料:
  • 问题内容: 我有一个,我使用Xcode Interface Builder设置了约束。 现在,我需要以编程方式更新该高度常数。 有一个类似的功能,但我不知道如何使用它。 问题答案: 从“界面”构建器中选择高度约束,然后选择其高度。因此,当您想更改视图的高度时,可以使用以下代码。 方法是的实例方法。以编程方式设置约束时,这将很有帮助。它更新视图的约束。有关更多详细信息,请单击此处。

  • 我有一个,我使用Xcode Interface Builder设置约束。 现在,我需要以编程方式更新该实例的高度常量。 有一个函数类似,但我不知道如何使用它。

  • 问题内容: 抱歉,我一直在搜索此论坛,但没有确切答案。所以我问自己的。 我有一堂课,用目标纵向屏幕640x960显示glView和webview两种布局。我计划拆分布局。因此我的背景看起来是在(0,0,640,480)或纵向屏幕的一半处绘制的。,我想在(0,481,640,479)处绘制我的Web视图,该视图占据了从中间到底部的另一半。但是,我失败了,无法弄清楚如何实现我想要的布局。如何设置web

  • 我试图设置一系列div的背景图像,每个都有自己固定的高度,并拉伸以填充宽度,即使顶部/底部有溢出被剪辑。我只是不想边缘有空白。 目前,我有:http://jsfiddle.net/ndKWN/ CSS

  • 问题内容: 我试图设置一个包含两个子元素的div的自动高度,这些子元素的位置固定且绝对明确。 我希望我的父容器具有自动高度,但是我知道这很困难,因为子元素及其位置从页面结构中取出。 我曾尝试为我的父div设置一个有效的高度,但由于我的布局具有响应性,因此当其比例缩小到移动时,高度保持不变,因为其中的内容被堆叠起来,因此高度需要随其子代而增加。 不知道这是否有意义,我在我的atm上没有实际的代码,但

  • 问题内容: 我有这个HTML结构: 我想在主体部分(#body)中包含三个部分而不会溢出。因此,我需要在中间部分使用滚动条。 我尝试了这个CSS: 和这个: 但是它们都不起作用。 我在JSFiddle上做了一个例子。 我可以仅使用CSS和HTML来做到这一点吗?我宁愿避免使用Javascript。 问题答案: Flexbox是一种现代替代方案,可让您无需固定高度或JavaScript即可执行此操作