如何动态ios 代码修改xib约束约束NSLayoutConstraint

Pages: 1/2
主题 : 使用了Autolayout和约束后,无法用代码修改View的位置,怎么处理?
级别: 新手上路
可可豆: 317 CB
威望: 344 点
在线时间: 175(时)
发自: Web Page
使用了Autolayout和约束后,无法用代码修改View的位置,怎么处理?&&&
项目使用了 Use Autolayout, &view 使用了顶端距离为0,底部的距离为0 ,约束的情况后。
是不是就不能使用代码改变View的Y轴位置了???
这两行代码不起作用了
&_MainView.translatesAutoresizingMaskIntoConstraints = NO;
_MainView.frame = CGRectMake(0, -66, 320, _MainView.frame.size.height);
级别: 新手上路
UID: 233830
可可豆: 119 CB
威望: 52 点
在线时间: 9(时)
发自: Web Page
Use Autolayout &勾选之后, 等同于系统帮你自动布局。
级别: 新手上路
可可豆: 317 CB
威望: 344 点
在线时间: 175(时)
发自: Web Page
_MainView.translatesAutoresizingMaskIntoConstraints = NO;可我把 translatesAutoresizingMaskIntoConstraints 设置为 NO了,为什么还是不行呢?是因为
使用了顶端距离为0,底部的距离为0 的两个约束的问题么?
级别: 新手上路
UID: 233830
可可豆: 119 CB
威望: 52 点
在线时间: 9(时)
发自: Web Page
_MainView.translatesAutoresizingMaskIntoConstraints = NO;
只是说不在使用你在自动布局是给的初始值,还在使用自动布局。
Use Autolayout &与手动设置frame是矛盾的,二者不可同时对一个控件有操作。
级别: 侠客
可可豆: 228 CB
威望: 228 点
在线时间: 298(时)
发自: Web Page
NSLayoutConstraint手动修改布局即可
级别: 侠客
可可豆: 625 CB
威望: 620 点
在线时间: 947(时)
发自: Web Page
那么问题来了,如果我利用AutoLayout设置了一个按钮,这个按钮需要处理成圆形,
那圆形应该需要在代码里面设置的吧?那这个怎么说?
级别: 新手上路
UID: 109103
可可豆: 124 CB
威望: 125 点
在线时间: 91(时)
发自: Web Page
我也遇到类似问题,请问楼主解决了吗,分享了呗,谢谢
级别: 骑士
UID: 156085
可可豆: 733 CB
威望: 901 点
在线时间: 739(时)
发自: Web Page
回 6楼(xiexianhui14) 的帖子
如图所示 直接改变layout 的 constant 就行了
图片:828A5651-47CD-4DBA-AA0C-BBBDC9ED62C7.png
级别: 侠客
可可豆: 143 CB
威望: 145 点
在线时间: 178(时)
发自: Web Page
用了自动布局 就忘了绝对定位吧 可以在程序中写约束来控制
级别: 侠客
可可豆: 614 CB
威望: 616 点
在线时间: 281(时)
发自: Web Page
回 5楼(rollrock) 的帖子
这个用背景图片吧。
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版12:53 提问
ios自动布局如何代码添加约束
在ios上面除了用SB添加约束外我用代码如何这样写布局
用系统方法或者Masonry
按赞数排序
一般是根据当前屏幕宽度,以及你希望的间隔大小,算出每个方框的大小
然后代码中设置宽度约束等。
cgfloat bianJu
cgflaot btnWidth = ([UIApplication sharedApplication].keyWindow.bounds.size.width - 2*bianJu - 10)/3
for (int i = 0; i & 3;i++){
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake(10/2 + i*btnWidth, [self.view center].y -btnWidth/2 ,btnWidth, btnWidth)];
主要是取当前屏幕的中心点y - btn 的高度的一半
//需要布局的控件
UIButton *leftBtn = [[UIButton alloc]init];
UIButton *rightBtn = [[UIButton alloc]init];
//添加到哪个父视图中?两个控件所在父视图不同不能尽行约束
[self.view addSubview:leftBtn];
[self.view addSubview:rightBtn];
//开始布局
//第一个参数是需要添加约束的控件,第二个参数是需要在哪里添加约束NSLayoutAttributeTop表示控件的顶部,第三个参数是NSLayoutRelationEqual表示相等,第四个参数是添加约束的控件的对应的约束对象,这里就是self.view或者leftBtn.superview都可以,第五个参数NSLayoutAttributeTop表示父视图的顶部,第六个参数是倍数,第七个参数是约束的大小
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:leftBtn attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:leftBtn.superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:50];
//设定完约束后需要添加到对应的控件上,但约束设计到两个控件以上的需要把约束加到该全部设计到的控件的父视图中
[self.view addConstraint:topConstraint];
//上面只是以一个位置上的约束演示,还有左边,下边,右边的约束如上相类同
其他相关推荐NSLayoutConstraint *constraint =
[NSLayoutConstraint constraintWithItem:&#(id)#& attribute:&#(NSLayoutAttribute)#& relatedBy:&#(NSLayoutRelation)#& toItem:&#(id)#& attribute:&#(NSLayoutAttribute)#& multiplier:&#(CGFloat)#& constant:&#(CGFloat)#&]
Item:要约束的控件
attribute:要约束的控件约束的类型(做怎样的约束)
relatedBy:与参照控件之间的关系
toItem:参照的控件
attribute:参照的控件约束的类型(做怎样的约束)
multiplier:约束的控件和参照的控件关系倍数
constant:常量
最后两个参数计算关系:
view1.property1 =(view2.property2 * multiplier)+ constant&
二.Autolayout的常见警告和错误
控件的frame不匹配所添加的约束, 比如:约束控件的宽度为150, 而控件现在的宽度是160
缺乏必要的约束, 比如:只约束了宽度和高度, 没有约束具体的位置
两个约束冲突,比如:1个约束控件的宽度为150, 1个约束控件的宽度为160
1.代码实现:
ViewController.m
1 #import "ViewController.h"
3 @interface ViewController ()
7 @implementation ViewController
9 - (void)viewDidLoad {
[super viewDidLoad];
//创建添加blueview
UIView *blueView=[[UIView alloc] init];
blueView.backgroundColor = [UIColor blueColor];
blueView.translatesAutoresizingMaskIntoConstraints = NO;//禁止Autoresizing
[self.view addSubview:blueView];
//创建添加redView
UIView *redView=[[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
redView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:redView];
// 1.0父View左边 约束 blueView左边 30
NSLayoutConstraint *blueLeftCon=[NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:30.0];
[self.view addConstraint:blueLeftCon];
// 1.1父View顶部 约束 blueView顶部 30
NSLayoutConstraint *blueTopCon=[NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:30.0 ];
[self.view addConstraint:blueTopCon];
// 1.2父View右边 约束 blueView右边 30
NSLayoutConstraint *blueRightCon= [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:-30 ];
[self.view addConstraint:blueRightCon];
// 1.3 blueView 相当于 高度设置成50
NSLayoutConstraint *blueHeightCon=[NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:0 multiplier:0 constant:50];
[blueView addConstraint:blueHeightCon];
//2.0 redView 顶部 和 blueView 底部 间距20
NSLayoutConstraint *redTopCon=[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeBottom multiplier:1.0 constant:20];
[self.view addConstraint:redTopCon];
//2.1 redView 左边 和 blueView 水平中心线对齐
NSLayoutConstraint *redLeftCon=[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual
toItem:blueView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0];
[self.view addConstraint:redLeftCon];
//2.2 redView 右边 参照 blueView 右边对齐
NSLayoutConstraint *redRightCon = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];
[self.view addConstraint:redRightCon];
//2.3 redView 高度 参照 blueView 高度相等
NSLayoutConstraint *redHeightCon=[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0];
[self.view addConstraint:redHeightCon];
2.storyboard实现:&&
阅读(...) 评论()

我要回帖

更多关于 ios 代码修改xib约束 的文章

 

随机推荐