首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NSLayoutConstraint -无法将子视图框设置为父视图边界

NSLayoutConstraint是一种用于自动布局的约束类,它用于定义视图之间的关系和位置。它是iOS开发中UIKit框架的一部分,用于实现界面的自适应和响应式布局。

NSLayoutConstraint可以用于设置子视图相对于父视图的边界。然而,它无法直接将子视图的框设置为父视图的边界。相反,我们需要使用NSLayoutConstraint的其他属性和方法来实现这一目标。

要将子视图的框设置为父视图的边界,我们可以使用以下步骤:

  1. 首先,确保子视图和父视图已经正确添加到视图层次结构中。
  2. 使用NSLayoutConstraint的constraint(withVisualFormat:options:metrics:views:)方法创建一个约束对象。该方法使用可视化格式语言(Visual Format Language)来描述约束。
  3. 在可视化格式语言中,使用"H:|subview|"来设置子视图的水平边界,使用"V:|subview|"来设置子视图的垂直边界。其中,"|"表示父视图的边界,"subview"表示子视图。
  4. 将约束对象添加到父视图上,使用父视图的addConstraint(_:)方法。

下面是一个示例代码,演示如何将子视图的框设置为父视图的边界:

代码语言:swift
复制
// 创建子视图和父视图
let parentView = UIView()
let subview = UIView()
parentView.addSubview(subview)

// 禁用AutoresizingMask,确保约束生效
parentView.translatesAutoresizingMaskIntoConstraints = false
subview.translatesAutoresizingMaskIntoConstraints = false

// 创建约束对象
let constraints = NSLayoutConstraint.constraints(withVisualFormat: "H:|[subview]|", options: [], metrics: nil, views: ["subview": subview])
constraints += NSLayoutConstraint.constraints(withVisualFormat: "V:|[subview]|", options: [], metrics: nil, views: ["subview": subview])

// 添加约束
parentView.addConstraints(constraints)

在这个示例中,我们创建了一个父视图parentView和一个子视图subview,并将子视图添加到父视图中。然后,我们禁用了父视图和子视图的AutoresizingMask,以确保约束生效。接下来,我们使用可视化格式语言创建了约束对象,将子视图的框设置为父视图的边界。最后,我们将约束对象添加到父视图上。

NSLayoutConstraint的优势在于它提供了一种灵活且强大的方式来定义视图之间的关系和位置。它可以自动适应不同屏幕尺寸和设备方向的变化,使得应用程序的界面在不同设备上都能够正确地布局和显示。

NSLayoutConstraint的应用场景包括但不限于:

  • 自适应布局:使用NSLayoutConstraint可以实现界面的自适应布局,使得应用程序在不同屏幕尺寸和设备方向下都能够正确地显示。
  • 界面对齐:使用NSLayoutConstraint可以实现界面元素的对齐,如将按钮与标签水平对齐或垂直对齐。
  • 界面间距:使用NSLayoutConstraint可以定义界面元素之间的间距,如设置两个按钮之间的水平间距或垂直间距。
  • 界面比例:使用NSLayoutConstraint可以定义界面元素之间的比例关系,如设置一个视图的宽度是另一个视图宽度的两倍。

腾讯云提供了一系列与云计算相关的产品和服务,其中包括与自动布局相关的云产品。您可以访问腾讯云的官方网站(https://cloud.tencent.com/)了解更多关于这些产品的信息和详细介绍。

请注意,本回答中没有提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的云计算品牌商,以遵守您的要求。如需了解更多关于这些品牌商的信息,建议您直接访问它们的官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【IOS开发基础系列】Autolayout自动布局专题

-[view]-  :  设置视图的宽度高度 5. |-30.0-[view]-30.0-|: 表示离父视图 左右间距  30 6. [view(200.0)] :表示视图宽度为200.0 7....//设置子视图的宽度和父视图的宽度相同 [self.view addConstraint: [NSLayoutConstraint constraintWithItem: v1 attribute:...NSLayoutRelationEqual toItem: self.view attribute: NSLayoutAttributeWidth multiplier: 1.0 constant:0]];  //设置子视图的高度是父视图高度的一半...0(距离为0的话也可省略)同时将v2的水平方向的宽度和v1设置成相同 [self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat...0(距离为0的话也可省略)同时将v2的垂直方向的高度和v1设置成相同  [self.viewaddConstraints:[NSLayoutConstraint constraintsWithVisualFormat

34940
  • iOS AutoLayout全解

    |:竖线表示为边界(当前所在View的边界),这里紧邻方向表示符V,方向是从上到下,因此表示上面界。 0:NSNumber 0 表示约束值为0。这里是Label1距离上边界的约束为0。...案例1 设置某个View距离父View上下左右间距全部为20。 ? 案例2 某个View距离父View的左侧20,上20,宽高均为100。 ?...Fill:子视图填充他所在的位置(默认) Leading:子视图头部对齐 Center:子视图居中对齐 Trailing:子视图尾部对齐 Distribution:子视图的大小 Fill:子视图填充整个...UIStackView Fill Equally:子视图填充空白区域并等分 Fill Proportionally:按照目前相对位置进行填充 Equal Spacing:等间距 Spacing设置子视图之间的间距大小...Baseline Relative:如果设置子视图间距的大小为基线到下一个视图的头部

    4.6K60

    浅汇-iOS UI布局

    使用了这么久,       对于父试图是  Button / UITextFeild等非UIView的直接子类,布局其子视图时,这里面的约束是不生效的。...而且同层级的试图  无法达到重合布局,两个试图重合的话只有是  父/子视图的关系。...,需要使用一下方法来自动布局,并且这个时候不可以再以父试图的底为标准来设置其内部子视图,这是一种【从里到外】的布局思路,cell的自适应高度也是这种思路;平时我们的思路都是一种【从外到里】的思路,先确定外面的再使其自动布局里面的...有一个需要注意的地方,cell中所有的子视图都需要加载在 self.contentView上才行,不可加载在self.contentView的子视图上,否则按下面的这个方法设置也会出问题。...实现了UIScrollView可滚动高度根据内部子视图的内容高度动态设置 /** 设置scrollview内容自适应,第一个参数为作为底部的子视图,第二个参数为到sc底部的间距。

    2.1K20

    iOS界面布局之三——纯代码的autoLayout及布局动画

    通过这个对象,我们可以设置类似视图对象之间的间距,约束的宽高,比例等属性。...,例如,如过我要设置view1的上边距离父视图的上边一定间距,这个view2就是view1的父视图,如果我要设置view1与另一个视图一定距离,这个view2就是另一个视图。...我们可以使用如下的约束代码: UILabel * label = [[UILabel alloc]init];     label.numberOfLines = 0;     //使用代码布局 需要将这个属性设置为...NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:100];     //添加约束之前,必须将视图加在父视图上...代表是水平的布局还是垂直的布局,H代表水平,V表示垂直,|表示父视图的边沿,-20-表示距离20px,[]内是要布局摆放的视图对象名,()中是约束的尺寸,H下则为宽度,V下则为高度,@后面的数字代表优先级

    2.9K30

    iOS-屏幕适配实现(AutoLayout)

    ,添加到父视图上 对于两个同层级 view 之间的约束关系,添加到它们的父 view 上 相对于另一个控件的约束,添加到其共有的父视图上 对于两个不同层级 view 之间的约束关系...,添加到他们最近的共同父 view 上 跨层级的约束,添加到其最上层的父视图上 对于有层次关系的两个 view 之间的约束关系,添加到层次较高的父 view 上...如果我们通过约束给定了UILabel的width = 100,但是内容仍然少的可怜,不能包裹,可以把宽度设置为设置同理可证。...原因在于,UILabel是根据内容自动调整宽度和高度,如果没有内容,那么宽度和高度就是0,导致UILabel无法显示。...左边的加号指定尺寸,Installed表示通用 控件大量属性修改可通过installed添加布局 修改约束 方式一: 需要选中将要编辑的约束(上图小标1),选中后约束在视图中显示为高亮

    44110

    Objectiv-C UIKit基础 NSLayoutConstraint的使用(VFL实现)

    //设置orangeView,greenView水平方向约束 NSArray *conH = [NSLayoutConstraint constraintsWithVisualFormat:@"...metrics 以字典的形式设置距离变量 比如 "H:|-[dis1]-[view1]-[dis2]-[view2(==view1)]-20-|"这句中的[dis1] [dis2]为视图变量,将字典的...view1 view2即为key 对应相应的视图 views 以字典的形式设置视图变量 比如 "H:|-20-[view1]-20-[view2(==view1)]-20-|"这句中的[view1]...[view2]为视图变量,将字典的view1 view2即为key 对应相应的视图 约束关系(与父类的关系)用到另一个类方法 +(instancetype)constraintWithItem:(id...比如 为 orangeView 和 greenView添加约束需要在其父类self.view上添加约束 blueView的父类是orangeView 所以给blueView添加约束时 在orangeView

    45230

    深入详解iOS适配技术

    周围的四条虚线分别代表子控件距离父控件上、下、左、右之间的距离关系/或者叫约束关系,周围的四条虚线所包围的小方块代表子视图,小方块内部的两条带双向箭头的线分别代表子控件的宽度和高度。...当我们点击周围四条虚线时,虚线会变成实线,代表子控件和父控件在这个方向上的间距被固定了。当我们点击子视图内部的虚线时,同样也变为实线,代表子视图的宽度或者高度被固定了。...举个例子:当我们点击最左边的虚线时候,代表子视图距离父视图左边的间距被固定了,而其他三个方向的距离和宽高会随父视图的缩放二缩放。...storyBoard上的autoresizing.gif 注意:Autoresizing只能设置父子视图之间的关系,也就是说,Autoresizing只能控制子视图和父视图之间的位置/大小关系。...比如,给某个子控件A设置了左边距和右边距后,虽然没有明确指定子控件A的宽度,但是其左右边距一旦设置,那么宽度可以根据子控件A和父控件左右之间的边距自动推算出来。

    8.5K70

    iOS开发之Masonry框架源码解析

    Masonry简化了NSLayoutConstraint的使用方式,让我们可以以链式的方式为我们的控件指定约束。...也就是子视图的top与父视图的top中间隔着10个pt。 1. 使用NSLayoutConstraint添加约束 下方这段代码就是给subView添加了一个相对于superView的Top约束。...而mas_remakeConstraints中所做的事情是将removeExisting属性设置成YES, 表示将当前视图上的旧约束进行移除,然后添加上新的约束。 ? ?...下方的代码就是寻找两个视图的公共父视图,当然是最近的那个公共父视图。如果找到了就返回,如果找不到就返回nil。...寻找两个视图的公共父视图对于约束的添加来说是非常重要的,因为相对的约束是添加到其公共父视图上的。

    1.2K80

    Swift-MVVM 简单演练(一)

    在HQMainViewController中设置四个子控制器 用extension将代码拆分 通过反射机制,获取子控制器类名,创建子控制器 设置每个子控制的tabBar图片及标题 HQMainViewController...点击四个子控制器的时候,访客视图打印的地址都不一样。...修改设置子控制器的参数配置 修改设置子控制器的配置 fileprivate func setupChildControllers() { let array: [[String: Any...则可以直接通过addTarget的方式为该视图中的按钮添加监听方法 这样做的代价是耦合度高,控制器和视图绑定在一起,但是省略部分冗余代码 ---- 调整未登录时导航按钮 如果单纯的在setupVistorView...登录之后才显示别的,因此,我们可以将HQBaseViewController中的setupUI方法设置成fileprivate不让外界访问到,并且将setupTableView设置成外界可以访问,如果需要在登录后的控制器里面显示所需的样式

    10.3K51

    iOS11UINavigationBar的item左右间距调整

    相信很多同学都知道在iOS7之后调整导航栏两侧按钮距离左右间距,其实就是在左右barButtonItem的数组中添加一个宽度为负的占位item。...可以用xcode查看视图层次,以方便理解。...现在有一个终极解决方案: UINavigationBarContentView平铺在导航栏中作为iOS11的各个按钮的父视图,该视图的所有的子视图都会有一个layoutMargins被占用,也就是系统调整的占位...,我们只要把这个置空就行了.那样的话该视图下的所有的子视图的空间就会变成我们想要的那样,当然为了保险起见,该视图的父视图也就是bar的layoutMargins也置空,这样 整个bar就会跟一个普通视图一样了...举一个设置LeftBarButtonItem的例子: #import "UINavigationItem+iOS7Spacing.h" #import   #define

    1.5K30

    iOS11UINavigationBar的item左右间距调整

    相信很多同学都知道在iOS7之后调整导航栏两侧按钮距离左右间距,其实就是在左右barButtonItem的数组中添加一个宽度为负的占位item。...可以用xcode查看视图层次,以方便理解。...现在有一个终极解决方案: UINavigationBarContentView平铺在导航栏中作为iOS11的各个按钮的父视图,该视图的所有的子视图都会有一个layoutMargins被占用,也就是系统调整的占位...,我们只要把这个置空就行了.那样的话该视图下的所有的子视图的空间就会变成我们想要的那样,当然为了保险起见,该视图的父视图也就是bar的layoutMargins也置空,这样 整个bar就会跟一个普通视图一样了...举一个设置LeftBarButtonItem的例子: #import "UINavigationItem+iOS7Spacing.h" #import   #define

    3.2K50

    swift下autolayout的实现笔记

    backgroundColor = UIColor.redColor() v1.text = "v1" v1.setTranslatesAutoresizingMaskIntoConstraints(false) //设置在约束布局系统中是否把自动布局转换为约束布局...self.view.addSubview(v1) 然后添加约束 self.view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat...,参数类型为NSDictionary,从外部传入 views:就是上面所加入到NSDictionary中的绑定的元素 表达式规则 |: 表示父视图 -: 表示距离 >= :表示视图间距、宽度和高度必须大于或等于某个值...视图间距、宽度和高度必须小宇或等于某个值 == :表示视图间距、宽度或者高度必须等于某个值 比如我们要把上面创建的label设置为距离父视图左右都是10,那么表达式就是 "H:|-10...-[v1]-10-|" 我们要让他高40,距离父视图顶部为10 "V:|-10-[v1(==40)]" 如果我们再创建V2,V3两个元素,让他们等宽排列在V1的下面 "H:|-1-[v2(v3)]-[v3

    90580

    Autolayout

    能很轻松地解决屏幕适配的问题 Autolayout的2个核心概念 参照 约束 与 Autoresizing 区别 在Autolayout之前,有Autoresizing可以作屏幕适配,但局限性较大,有些任务根本无法完成...的步骤 利用NSLayoutConstraint类创建具体的约束对象 添加约束对象到相应的view上 - (void)addConstraint:(NSLayoutConstraint *)constraint...view.translatesAutoresizingMaskIntoConstraints = NO; 添加约束之前,一定要保证相关控件都已经在各自的父控件上 不用再给view设置frame NSLayoutConstraint...UILabel实现包裹内容 设置宽度约束为 <= 固定值 设置位置约束 不用去设置高度约束 基于Autolayout的动画 在修改了约束之后,只要执行下面代码,就能做动画效果 [UIView animateWithDuration...的左边间距为30; make.bottom.equalTo(self.view.mas_bottom).offset(-30);//和父view的底部间距为30; make.right.equalTo

    92860

    iOS自动布局——Masonry详解

    但手动布局的方式是,一次性计算出这四个值,然后设置进去,完成布局。但当父控件或屏幕发生变化时,子控件的计算就要重新来过,非常麻烦。...self.view addConstraint:leftLc]; 这一段代码即是: 控件(blueView)的 x = rootView的x * 1.0 + 20 这里一定要注意,这样的一条约束,涉及了子控件和父控件...,所以这条约束一定要添加到父控件中。...效果图 我们注意到,自动布局其实工作分两步: 创建视图的约束 将约束添加到合适的位置 约束关系从上面的描述中,已经非常清晰了。那么如何寻找约束添加的合适位置呢? ?...self.installedView = self.firstViewAttribute.view.superview; } 注意到,closetCommonSuperview就是Masonry为我们找到的最近公共父控件

    1K20

    iOS学习——布局利器Masonry框架源码深度剖析

    view 之间的约束关系,添加到层次较高的父 view 上 (4)对于比如长宽之类的,只作用在该 view 自己身上的话,添加到该 view 自己上   具体关于NSLayoutConstraint的详细使用方法参见...用Masonry框架进行布局非常简单,主要特点是采用链式语法进行布局,这一点使得我们在使用和代码布局上更为方便,利用Masonry进行布局的前提条件之一是 布局视图必须先被添加到父视图中。...UIView *sv1 = [UIView new]; //利用Masonry进行布局的前提条件之一是 布局视图必须先被添加到父视图中 [sv addSubview:sv1]; [sv1 mas_makeConstraints...是Masonry框架中UIview + MASAdditions(UIview分类)中的方法,所以一般的控件视图都可以直接调用该方法,该方法传入一个block函数作为参数(返回值为void,参数为MASContraintMaker...每个constraint的delegate为它的父容器,因为需要父容器来执行添加和替换约束的操作。 4 Masonry框架的整体架构 ?

    1.5K101

    iOS框架·Masonry源码深度解析及学习启示:设计模式与链式编程思想

    ,先将子视图添加进来 [self.view addSubview:subView]; // 使用autoLayout约束,禁止将AutoresizingMask转换为约束...arrayWithObjects:constraintTop, constraintLeft, constraintBottom, constraintRight, nil]; // 把约束条件设置到父视图的...,有的话会寻找约束第一个和第二参数视图的公共 Superview,相当于求两个数的最小公倍数;如果不满足第一个条件,会判断约束第一个参数是否是 size 类型的,是的话直接取到它的视图;最后都不满足会直接取到约束第一个参数视图父视图...Component 为组合中的对象声明接口。 在适当的情况下,实现所有类共有接口的缺省行为 声明一个接口用于访问和管理 Component 的子组件。...在递归结构中定义一个接口,用于访问一个父部件,并在合适的情况下实现它。 Leaf 在组合中表示叶节点对象,叶节点没有子节点。 在组合中定义图元对象的行为。

    1.2K20
    领券