首页
学习
活动
专区
工具
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

27440

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.5K60

浅汇-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.8K30

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

42230

iOS-屏幕适配实现(AutoLayout)

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

31910

深入详解iOS适配技术

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

8.4K70

iOS开发之Masonry框架源码解析

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

1.1K80

iOS11UINavigationBar的item左右间距调整

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

3.1K50

iOS11UINavigationBar的item左右间距调整

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

1.5K30

Swift-MVVM 简单演练(一)

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

10.2K51

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

84180

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

90860

如何把设计图自动转换为iOS代码? 在线等,挺急的!

目前能得到的效果 视图基于 AutoLayout; 视图自动适配不同屏幕尺寸; 视图完全独立于数据与业务逻辑; 视图严肃仅与视图有位置关系; 可以视图模块的元素与模块同名属性自动关联; 仅需知道视图的宽高...< 同一设计图中,模块的所有视图. extern const NSString * YFViewComponentSubViewClassNameKey; //!...< 视图的类型. extern const NSString * YFViewComponentSubViewPropNameKey; //!...< 视图对应的属性,模块中应有属性与其对应,且可通过此属性访问对应的视图. extern const NSString * YFViewComponentSubViewHolderWidthKey...< 同一设计图中,视图的底部边距值(bottom). @interface YFViewComponent : UIView /** * 视图配置信息.

1.3K60

iOS自动布局——Masonry详解

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

91320

一文彻底搞懂js中的位置计算

当元素的 style.display 设置 "none" 时,offsetParent 返回 null。...我们来看看这张图: 计算元素距离 body 的偏移量 当我们需要获得元素距离 body 的距离时,但是又无法确定元素是否存在定位元素时(大多数时候在组件开发中,并不清楚节点是否存在定位)。...无法直接使用 offsetLeft/offsetTop 获取,因为并不确定元素是否存在定位元素。 使用递归解决,累加偏移量 offset,当前 offsetParent 不为 body 时。...除了 width 和 height 以外的属性是相对于视图窗口的左上角来计算的。 width和height是计算元素的大小,其他属性都是相对于口左上角来说的。...当计算边界矩形时,会考虑口区域(或其他可滚动元素)内的滚动操作,也就是说,当滚动位置发生了改变,top 和 left 属性值就会随之立即发生变化(因此,它们的值是相对于口的,而不是绝对的) 。

3.7K10

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.4K101
领券