ios 约束(六)

iOS在纯代码中使用AutoLayout添加约束 AutoLayout约束是苹果官方给定得约束信息。对于这个约束和UIView+AutoLayout.h延展的用法类似,不过加上了延展之后,不用写VFL语言 下面先看看以autolayout实现的效果为例我们讲解一下 下面开始上代码以用户名和密码为例,来说说, UITextField * userNameTextFiled = [[UITextField all... 阅读详情

1、实现约束规则之间的对比

    所有的约束规则都遵循同一套固定的结构,而且都有相关的优先级:

    view1.attribute(relation)view2.attribute*multiplier + constant

    上述等式的每个部分都与NSLayoutConstraint对象的属性相对应,他们分别是priority、firstItem。firstAttribute、relation、secondItem、secondAttribute、multiplier与constant。通过这些属性,我们很容易比对两条约束规则。

    UIView会把约束规则当成NSLayoutConstraint对象来保存或者移除。即便两条规则所描述的含义相同,只要其内存位置不同,他们就是不相等的。如果实现了规则之间的对比功能,那么就必须将规则专门存放的变量里面了,而是可以通过程序吗随时添加并移除它们。

    下面写了三个方法。constraint:matches:方法会比较两条约束规则的相关属性,以此判断两者是否相同。请注意,在比较的时候,我们只考虑等式本身,而不考虑优先级,因为两条约束规则只要描述的是同一套约束方法,那么无论开发者给其指定何种优先级,他们实际上都是等效的。

    还有两个方法分别叫作constraintMatchingConstraint:及removeMatchingConstraint:,前者在视图里查找与开发者所给规则相匹配的首条约束规则,而后者则把此约束规则从视图中移除。

    下面会把某条约束规则从视图里删除,并换上一条新约束规则,这样的话,此视图就会从上级视图的顶部跑到上级视图的底部了。对于这个简单的情况来说,我们完全可以把约束规则保存到实例变量中,并在稍后将其从视图里移除。不过,在需要管理多条约束规则或动态移除某约束规则的时候,这种相似约束规则的查询与移除功能还是非常有用的。

- (BOOL)constraint:(NSLayoutConstraint *)constraint1 matches:(NSLayoutConstraint *)constraint2
{
    if (constraint1.firstItem != constraint2.firstItem) {
        return  NO;
    }
    if (constraint1.secondItem != constraint2.secondItem) {
        return NO;
    }
    if (constraint1.firstAttribute != constraint2.firstAttribute) {
        return NO;
    }
    if (constraint1.secondAttribute != constraint2.secondAttribute) {
        return NO;
    }
    if (constraint1.relation != constraint2.relation) {
        return NO;
    }
    if (constraint1.multiplier != constraint2.multiplier) {
        return NO;
    }
    if (constraint1.constant != constraint2.constant) {
        return NO;
    }
    
    return YES;
}

- (NSLayoutConstraint *)constrainMatchingConstraint:(NSLayoutConstraint *)aConstraint
{
    for (NSLayoutConstraint *constraint in self.constraints) {
        if ([self constraint:constraint matches:aConstraint]) {
            return constraint;
        }
    }
    
    for (NSLayoutConstraint *constraint in self.superview.constraints) {
        if ([self constraint:constraint matches:aConstraint]) {
            return constraint;
        }
    }
    return nil;
}

- (void)removeMatchingConstraint:(NSLayoutConstraint *)aConstraint
{
    NSLayoutConstraint *match = [self constrainMatchingConstraint:aConstraint];
    if (match) {
        [self removeConstraint:match];
        [self.superview removeConstraint:match];
    }
}

2、创建尺寸固定且受规则约束的视图

    1、禁用translatesAutoresizingMaskIntoConstraints

     autoresizing可以指程序代码里用到的一些相关标志,例如UIViewAutoresizingFlexibleWidth等。如果要通过这些手段来指定视图的自动调整行为,那么在定义约束规则的时候,就不应该再引用该视图了。

    使用约束规则之前,应该先禁用视图中的有关属性,该属性会把涉及自动调整功能的掩码自行转换为约束规则。如果启用该属性,那么视图会通过与自动调整功能有关的掩码来参与到Auto Layout系统里面,要是禁用它,开发者就需要自己添加约束规则。

    这个与约束规则有关的属性叫作translatesAutoresizingMaskIntoConstraints。如果将其设为NO,我们就可以放心的向视图中添加自己的约束规则,而不必担心它会与系统自动生成的规则相冲突。这一点非常重要。若是尚未禁用该属性就直接开始添加约束,则可能会引发冲突。由自动调整功能所生成的那些规则无法与自己编写的这些规则和平共处。

    2、令视图出现在上级视图范围内

    下面第一个方法叫作constrainWithinSuperviewBounds,它会把某视图完全放在其上级视图的范围内。该方法创建了四条约束规则来保证这一点。其中一条规则要求视图的左边界不许与上级视图的左边界对齐,或位于其右侧,另一条规则要求本视图的顶端必须与上级视图的顶端对齐,或位于其下方,其余两条也与之相似。

    之所以要创建这个方法,是因为在约束规则比较宽松的系统中,视图的原点完全有可能是负值,从而导致自己出现在屏幕之外而不为用户所见。该方法的基本意思是:在排布这个子视图的位置时,请考虑到(0,0)原点与上级视图的尺寸,而不要把它排布到上级视图外面去。

    在日常开发中,我们不一定非要设置这套约束规则。但在刚开始接触约束并想通过代码来研究它的时候,这种约束规则就显得非常有用了。他能够确保本视图不会越出上级视图的范围,从而令我们可以测试其他各项约束规则,并观察这些规则之间的关系。

    此外,在熟悉了约束系统之后,我们可能还想给程序添加一些调试用的反馈代码,以便在主视图加载完毕并运用了约束规则之后,能够知道我们自己的视图位于何处。比方说,可以把下面这个for循环添加到viewDidAppear:方法中:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    for (UIView *view in self.view.subviews) {
        NSLog(@"View (%d) location:%@",[self.view.subviews indexOfObject:view],NSStringFromCGRect(view.frame));
    }
}

    3、限定视图的尺寸

    下面第二个方法叫作constrainSize:,他会把视图的尺寸固定为开发者所指定的CGSize。在定义约束规则的时候,这是一种经常会用到的操作。我们不能再像原来那样设定视图的框架。另外也请记得:这些约束规则都只是一种请求,未必总是与最终的布局完全相符。假如没有合理的设计约束规则,那么宽度为100个点的文本框在最终的程序界面里其宽度可能会变成107个点,或更糟。

    我们可以在约束规则中针对某视图来指定其宽度或高度,然而这两条规则所要用到的宽度值和高度值是不能预判的,因为constrainSize:方法要使用与各种视图才行。于是,我们把这两个值先放在metrics字典里,然后再传给constraintsWithVisualFormat。所谓指标,其实就是约束规则里所用到的一些数值变量。

    这两条规则所用的两个指标分别叫作theHeight和theWidth,这些名称完全可以随机选取,开发者应该把字符串作为键,放在传给metrics:参数的字典里。在调用创建约束规则的那个方法时,把这个字典传进去。指标里的每个键必须出现在这份字典中,而且它所对应的值必须是个NSNumber。

    方法里的两条约束规则设定了我们所期望的视图的宽度及视图的高度。两个格式字符串分别告诉约束系统当前这个视图在横轴和纵轴上的尺寸应该是多少。

    第三个方法叫作constrainPosition:,他会构建两条约束规则,用于确定本视图的原点在上级视图里的位置。

    4、把前面几点的内容拼装起来

    我们要用约束规则把上述标签和其上级视图联系起来,然而在添加规则之前,必须先把标签控件作为子视图放到上级视图里。在其上添加约束规则的那个视图和规则中所提到的视图必须位于同一个视图体系中,甚至会令程序在运行的时候崩溃。所以,我们有时可能要稍稍调整一下代码顺序,比方说,上面这个方法就会在添加约束规则之前,先把标签放在上级视图中。

    无论按何种顺序来调整视图的生成代码,我们都要遵循下列步骤:首先创建视图,然后将其添加到上级视图里,接下来禁用translatesAutoresizingMaskIntoConstraints,最后运用必要的约束规则。

- (void)constrainWithinSuperviewBounds
{
    if (!self.superview) {
        return;
    }
    
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.superview attribute:NSLayoutAttributeLeft multiplier:1 constant:0]];
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:self.superview attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationLessThanOrEqual  toItem:self.superview attribute:NSLayoutAttributeRight multiplier:1 constant:0]];
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationLessThanOrEqual toItem:self.superview attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];
    
}

- (void)constrainSize:(CGSize)aSize
{
    NSMutableArray *array = [NSMutableArray array];
    
    [array addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[self(theWith@750)]" options:0 metrics:@{@"theWidth":@(aSize.width)} views:NSDictionaryOfVariableBindings(self)]];
    
    [array addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[self(theHeight@750)]" options:0 metrics:@{@"theWidth":@(aSize.height)} views:NSDictionaryOfVariableBindings(self)]];
    [self addConstraints:array];
}

- (void)constrainPosition:(CGPoint)aPoint
{
    if (!self.superview) {
        return;
    }
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.superview attribute:NSLayoutAttributeLeft multiplier:1 constant:0]];
    [array addObject:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.superview attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
    [self.superview addConstraints:array];
}

2、将两个视图居中对齐

    如果想把两个视图居中对齐,可以将某视图的中心点属性同其容器的对应属性关联起来。有两个方法可以获得某视图的上级视图,并在这两个视图的中心点之间施加等同关系。

    下面是两条简单的原则:

    1、创建约束规则的时候,如果规则所涉及的某个视图是另一个视图的上级视图,那么就把规则添加到这个上级视图里。

    2、如果用格式化字符串来创建约束规则,而字符串里面又包含表示上级视图的竖线,那么就把规则添加到对应的上级视图里。

- (void)centerHorizontallyInSuperview
{
    if (!self.superview) {
        return;
    }
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.superview attribute:NSLayoutAttributeCenterX multiplier:1 constant:0]];
}

- (void)centerVerticallyInSuperview
{
    if (!self.superview) {
        return;
    }
    [self.superview addConstraint:[NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.superview attribute:NSLayoutAttributeCenterY multiplier:1 constant:0]];
}


3、设定宽高比

    在约束规则中使用放大倍数,也就是等式y=m*x+b中的m,即可设置视图的宽高比。

    为了切换宽高比,这个方案会把设置好的约束规则保存到NSLayoutConstraint型的aspectConstraint变量里。用户每次把比例从16:9切换到4:3或是切换回去时,这个解决方案都会将前一条约束规则从视图里移除,然后创建新规则并将其保存起来。创建新规则的时候要设置适当的放大倍数,创建好之后,还要将其添加到视图里面。

    我们既想令视图的宽度和高度可以灵活变化,又想使其保持一定的尺寸,所以,这条解决方案的createLabel方法需要做两件事。首先,要用谓词来限定宽度及高度,它请求系统吧宽度和高度都至少设为300个点。其次,要给这一请求指定优先级。我们把优先级设定的比较高,但是并没有设定成非满足不可,这样就给约束系统留下了继续调整布局的余地。做完这两件事之后,我们就实现了一套能够实时调整宽高比的程序界面,而且程序还可以在运行的时候动态改变其布局。

    限定宽高比的约束规则也可以用来保持某张图像的横纵比例。视图的contentMode可能无法完全准确的设定图像的横纵比。我们可以通过UIImage的size属性得知图像尺寸,然后用其宽度除以高度,并据此创建出符合横纵比的约束规则来。

- (UILabel *)createLabelWithTitle:(NSString *)title onParent:(UIView *)parentView
{
    UILabel *label = [[UILabel alloc] init];
    label.textAlignment = NSTextAlignmentCenter;
    label.backgroundColor = [UIColor greenColor];
    [parentView addSubview:label];
    
    label.translatesAutoresizingMaskIntoConstraints = NO;
    
    [label constrainWithinSuperviewBounds];
    [label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label(>=theWidth@750)]" options:0 metrics:@{@"theWidth":@300} views:NSDictionaryOfVariableBindings(label)]];
    label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[label(>=theHeight@750)]" options:0 metrics:@{@"theHeight":@300} views:NSDictionaryOfVariableBindings(label)];
    [label centerInSuperview];
    return label;
}

- (void)toggleAspectRatio
{
    if (aspectConstraint) {
        [self.view removeConstraint:aspectConstraint];
    }
    
    if (useFourToThree) {
        aspectConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeHeight multiplier:(4.0/3.0) constant:0];
    }else{
         aspectConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view1 attribute:NSLayoutAttributeHeight multiplier:(16.0/9.0) constant:0];
    }
    [self.view addConstraint:aspectConstraint];
    useFourToThree = !useFourToThree;
}

4、响应屏幕方向的变更

    设备屏幕的几何特征也会影响界面的布局方式。比方说,当设备处在横屏状态的时候,垂直方向上就没有太多的空间可以排布内容。

    为了适应这两种布局,我们必须根据屏幕方向的变更情况来修改约束规则,并重新排版。updateViewControllerConstraints方法能够依照当前的屏幕方向来刷新约束规则,它会把已有的规则全部移除,并设置新的约束。我们应该在willAnimateRotationToInterfaceOrientation:duration:里面调用此方法。这样所产生的效果就可以和界面里的其他动画效果平滑的融合起来。另外要注意,系统是在把视图控制器的interfaceOrientation属性设置好之后,再去调用willAnimateRotationToInterfaceOrientation的,而不是像willRotateTointerfaceOrientation:duration:方法那样在该属性变更之前回调。这样的话,updateViewControllerConstraint方法所查找到的界面方向本身已经是正确的界面方向了,我们可以根据此生成适当的约束规则。


- (void)updateViewControllerConstraints
{
    [self.view removeConstraints:self.view.constraints];
    NSDictionary *bindings = NSDictionaryOfVariableBindings(imageView,titleLabel,artistLabel,button);
    if (UIDeviceOrientationIsPortrait(self.interfaceOrientation) || (self.interfaceOrientation == UIDeviceOrientationUnknown)) {
        for (UIView *view in @[imageView,titleLabel,artistLabel,button]) {
            CENTER_VIEW_H(self.view,view);
        }
        CONSTRAIN_VIEWS(self.view,@"V:|-80-[imageView]-30-\[titleLabel(>=0)]-[artisLabel]-15-[button]-(>=0)-|",bindings);
    }else{
        CENTER_VIEW_V(self.view,imageView);
        CONSTRAIN(self.view,imageView,@"H:|-[imageView]");
        CONSTRAIN(self.view,titleLabel,@"H:[titleLabel]-15-|");
        CONSTRAIN(self.view,artistLabel,@"H:[artistLabel]-15-|");
        CONSTRAIN(self.view,button,@"H:[button]-15-|");
        CONSTRAIN_VIEWS(self.view,@"V:|-(>=0)-[titleLabel(>=0)]\-[artistLabel]-15-[button]-|",bindings);
        CONSTRAIN_VIEWS(self.view,@"H:[imageView]-(>=0)-[titleLabel]",bindings);
    }
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self updateViewControllerConstraints];
}

IOS之Masonry约束的使用 IOS之Masonry约束的使用 Masonry是做约束的,类似苹果开发的约束,做屏幕的适配,有xib开发,纯代码开发,storyboard约束等其他第三方框架。 pod 加入 pod 'Masonry', '~> 1.1.0' 懒得加版本直接写 pod 'Masonry' pod install安装的时候,默认给你安装最新版本。截止我发稿的时候,2021年11月份,版本更新到1.1.0,我用软件只用最新版本。旧版本不用 需要用的地方包含一下头文件#import <Masonry/Mas 阅读详情

相关推荐

[iOS] 关于UIScrollView的自动化布局约束

在iOS 6.0之后,引入了自动化布局约束,大大减轻了开发者关于界面布局的负担。但在对UIScrollView控件进行自动化布局时,常常会出现一些约束错误,主要原因是有些开发者不太清楚UIScrollView如何通过约束来计算contentSize的属性值,本文将对其原理以及使用方法进行简要叙述。.........

分享日常工作中遇到的种种问题 1106

代码添加constraint,设置translatesAutoresizingMaskIntoConstraints为NO的原因

在用代码为

1993奇葩 2万+

translatesAutoresizingMaskIntoConstraints

translatesAutoresizingMaskIntoConstraints属性和autolayout有关, 如果你定义的view想用autolayout, 就将translatesAutoresizingMaskIntoConstraints设为NO, 如果你使用的不是autolayout, 就将translatesAutoresizingMaskIntoConstraints设为YES...

shiios的博客 2177

iOS 基础 - 约束布局

xib 设置 代码 设置 三方框架

LOLITA0164的博客 1万+

iOS小技能:以动画的形式更新Masonry约束、宽高比约束、约束优先级、九宫格布局

1. iOS Masonry以动画的形式更新约束 >应用场景:筛选视图的显示与隐藏的时候带上动画来提升用户体验 3. 利用dividedBy进行九宫格布局 4. Masonry约束宽高比的例子demo】

专注于计算机研发知识和资讯分享 1万+

【ios】当xib对控件约束后,用代码进行约束的修改

将约束进行strong引用,对constant进行修改,注意如果weak的话会进行提前release self.top.constant+= 100 ; self.height.constant+= 100 ; 参考: https://blog.youkuaiyun.com/u010713935/article/details/54617983?utm_source=blogkpcl10

weixin_48618536的博客 990

iOS:原生代码添加约束

Width:对视图宽度的约束 Height:对视图高度的约束 Horizontal Spacing:对视图间水平距离的约束 Vertical Spacing:对视图间垂直距离的约束 Leading Space to Superview:与父视图左边界的约束 Trailing Space to Superview:与父视图右边界的约束 Top Space to Superview:与父视图上边界的约束 Bottom Space to Superview:与父视图下边界的约束 Widths Equally:视图

韩博主 1710

树莓派 SPI操作

扩展板配备一款0.96inch,128864分辨率的oled显示屏,通过SPI控制,先上显示效果图。由于程序过长,在这里我就不把代码全部贴出来了,只是简单讲解一下spi的操作函数。管脚如下如所有,左边方框的管脚分别为MOSI MISO SCLK,左边CE0,CE1为两个片选管脚,分别对应上图中的spidev0.0,spidev0.1两个设备。下载spidev库,复制到树莓派,并行运行如下命令解压安装。spi设备,此处设备为/dev/spi-decv0.0。在/dev路径下面,我们可以发现两个spi设备。

weixin_46529898的博客 914

IOS之NSLayoutConstraint布局约束详解

IOS 布局约束 小白的福音 NSLayoutConstraint

watertekhqx的博客 3476

ANSYS FLUENT 超临界流体物性分段线性插值数据批量导入

使用fluent自带数据库进行超临界流体仿真时,时不时会出现计算错误,考虑是数据库不稳定引起,而使用自定义的分段线性插值物性则不会出现上述情况。 超临界流体在拟临界点附近物性变化剧烈,需要使用较多的数据点才能更准确的表述物性,如果是在对话框中修改,一次只能输入一个点,人工输入极其费时费力且容易失误。 数据批量导入方法为: 1.以CO2为例,使用REFREPRO等物性查询软件或数据资料,获得所需物性数据表。 2.在FLUENT材料Materia...

wind_rider的博客 1万+

Moodle平台题库建设技术

Moodle平台题库建设技术简述1新的改变1功能快捷键1合理的创建标题,有助于目录的生成1如何改变文本的样式1插入链接与图片1如何插入一段漂亮的代码片1生成一个适合你的列表1创建一个表格1设定内容居中、居左、居右1SmartyPants1创建一个自定义列表1如何创建一个注脚注释也是必不可少的1KaTeX数学公式1新的甘特图功能,丰富你的文章1UML 图表1FLowchart流程图1导出与导入导出1...

lxf78的博客 4534

ios 约束(一)

1、什么是约束     约束就是一系列描述iOS程序视图布局的规则。他们限定了视图之间的关系,也限定了视图的布局形式。使用约束时。我们可以说“这些视图在水平方向上必须对齐”,或是“此视图必须根据另一个视图来调整自身高度,以便与之相符”。约束向开发者提供了一套布局语言,使得可以向视图里添加约束,并以此来描述各视图的空间关系。     iOS负责通过一套约束满足系统来实现这些布局需

ChasingDreamsCoder的博客 1136

AI使能的SVD算子:基于深度学习的矩阵分解方法

奇异值分解(Singular Value Decomposition, SVD)是线性代数中一种重要的矩阵分解方法,广泛应用于信号处理、数据降维、推荐系统等领域。传统SVD算法虽然精确,但在处理大规模矩阵时面临计算复杂度高、内存需求大等问题。本文提出了一种基于深度学习神经网络的SVD算子实现方法,完全摒弃传统数值算法,仅使用PyTorch框架构建的神经网络模型来完成大规模信道矩阵的SVD分解与还原。

huanghm88的专栏 1319

ios 约束(二)

1、约束系统的运作规律     可以认为约束系统所用的数学算是非常严格,实际上它们只是个参考。iOS会找到对符合约束的一种布局方案,有的时候,这种方案不止一套。下面给出约束系统的一些基本特征:     1、约束规则描述的是关系,而不一定是视图在某个方向上的属性。未必非要在知道右边界的情况下才能算出左边界。     2、每条约束规则都有其优先级。优先级的取值范围是从0到10

ChasingDreamsCoder的博客 890

图解ADAS电源系统架构:看懂这张图,搞懂前装摄像头的供电秘密!

别以为ADAS系统就是“摄像头 + SoC”,其实最难搞的是供电系统,尤其是要满足车规级ASIL-D安全等级时。供电时序、电压稳定性、电源监控、冗余通信链路,一个都不能少。😤一旦电源选型不对,轻则系统卡顿,重则全车失控,不是闹着玩的。

weixin_43199439的博客 671

Android 15.0 系统开机屏幕设置默认横屏显示

在15.0的系统ROM产品定制化开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了

安卓兼职framework和app工程师的博客 716

iOS之UIScrollview添加约束图文详解

转:http://www.jianshu.com/p/e4a12061776d 文/codingZero(简书作者) 原文链接:http://www.jianshu.com/p/e4a12061776d 著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。 前言 在iOS开发中,autolayout是一个很强大的东西,用好了,能让你事半功倍,用不好,各种

smilebigdear的专栏 3982

vTestStudio保姆教程之从0到1搭建软件环境

学习HIL测试的必经之路,保姆级教学VT从搭建到测试。

欢迎来到eee的博客 4185

iOS - XIB之AutoLayout添加约束

XIB——AutoLayout添加约束 仿QQ登录界面: 说明:以下各图背景红色只是方便看清楚; 1.创建工程:创建xib文件 2.打开xib文件: (1).创建头像: 拖控件:uiimageview——》放到任意位置——》点击Align键,Pin键;如下图: 此时:就可以对控件任意约束了: 说明:由于时间原因,没介绍的以后慢慢自己琢磨; Align键:Horizontally: 垂直居中对齐

gongyuhonglou的博客 2514

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

iOS AutoLayout Xcode约束教程

Today we will look into iOS AutoLayout in Xcode. We’ll implement and use AutoLayout and Constraint in our storyboards. These components are vital in keeping the storyboards designs consistent across s...

从零开始的教程世界 913

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

iOS Auto Layout原理与约束系统深度解析(10)

在iOS开发早期,开发者主要使用`frame`属性进行视图布局,这种方式在多设备适配场景下存在诸多弊端。随着iPhone屏幕尺寸增多、iPad设备引入,基于`frame`的布局方式难以适应动态变化的屏幕环境。为此,苹果在iOS 6引入Auto Layout,通过约束系统实现视图间关系的声明式布局,解决多设备适配难题。

Android开发领域创作者 1881

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ios 自动布局添加删除约束

虽然现在都用Masonry布局,但还是记录一下,以备不时之需。 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:playBtn // 要添加约束的view attribute:NSLayoutAttributeWidth // 要添加的约束属性 relatedBy:NSLayoutRelationEqu...

u011248221的博客 3636
上一篇: ios 约束(五)
下一篇: ios 约束(七)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值