相关疑难解决方法(0)

我什么时候可以激活/停用布局约束?

我在IB中设置了多组约束,我想根据某些状态以编程方式在它们之间切换.有一个constraintsA出口集合,所有出口集合都标记为从IB安装,constraintsB出口集合全部在IB中卸载.

我可以编程方式在两个集之间切换,如下所示:

NSLayoutConstraint.deactivateConstraints(constraintsA)
NSLayoutConstraint.activateConstraints(constraintsB)
Run Code Online (Sandbox Code Playgroud)

但是......我无法弄清楚何时这样做.看起来我应该能够做到这一点viewDidLoad,但我不能让它工作.我已经尝试过调用view.updateConstraints()view.layoutSubviews()在设置约束后,但无济于事.

我确实发现,如果我设置约束,viewDidLayoutSubviews一切都按预期工作.我想我想知道两件事......

  1. 为什么我会出现这种行为?
  2. 是否可以从viewDidLoad激活/停用约束?

uiview ios autolayout nslayoutconstraint swift

97
推荐指数
7
解决办法
7万
查看次数

如何在iOS中以编程方式设置宽高比限制?

我已经为我的视图控制器使用了自动布局.我已经在约束中设置了V和H位置,但我想知道当它变为5s,6和6 Plus时如何增加我的按钮大小.这是我为登录按钮添加约束的方式:

NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary];
[btnLogin addConstraints:btncon_V];

NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:btncon_POS_H];


NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary];

[self.view addConstraints:btncon_POS_V];
Run Code Online (Sandbox Code Playgroud)

但我的问题是,虽然它管理左侧和右侧间隙,但由于高度固定,它在iPhone 6和6 Plus中得到了拉伸.如何根据屏幕尺寸增加尺寸?我认为这可能是宽高比,但我如何在代码中设置宽高比约束?

constraints ios autolayout nslayoutconstraint

64
推荐指数
7
解决办法
7万
查看次数

iOS - 通过Swift更改约束的乘数

如何使用Swift更改约束的乘数.

someConstraint.multiplier = 0.6 // error: 'multiplier' is get-only property
Run Code Online (Sandbox Code Playgroud)

我想知道如何更改代码中的乘数(Swift).

ios swift

27
推荐指数
1
解决办法
2万
查看次数

自动布局:动画更改为NSLayoutConstraint的乘数

我有这个简单的观点:

- (void)viewDidLoad
{
    [super viewDidLoad];
    redBox = [[UIView alloc] init];
    [redBox setBackgroundColor:[UIColor redColor]];
    [redBox setTranslatesAutoresizingMaskIntoConstraints:NO];
    [self.view addSubview:redBox];

    //H:
    widthConstraint = [NSLayoutConstraint constraintWithItem:redBox
                                                   attribute:NSLayoutAttributeWidth
                                                   relatedBy:NSLayoutRelationEqual
                                                      toItem:self.view
                                                   attribute:NSLayoutAttributeWidth
                                                  multiplier:0.5
                                                    constant:0.0];
    [self.view addConstraint:widthConstraint];

    //More constraints... 
}
Run Code Online (Sandbox Code Playgroud)

我想动画一下redBox宽度的增加.

我试过这个:

widthConstraint.constant = 100;

[UIView animateWithDuration:1
                 animations:^{
                     [self.view layoutIfNeeded];
                 }
 ];
Run Code Online (Sandbox Code Playgroud)

这会将视图的宽度增加100并对其进行动画处理,但我需要将其增加一个与其超视图宽度成比例的量.换句话说,我想设置widthConstraintS" multiplier0.8.

但是NSLayoutConstraintmultiplier是只读的!这是否意味着我widthConstraint每次想要对其进行动画修改时都必须删除,修改和重新添加,multiplier还是有更好的方法?

uikit ios autolayout nslayoutconstraint

9
推荐指数
1
解决办法
5355
查看次数

无法以编程方式在swift中设置NSLayoutConstraint乘数..."无法分配此表达式的结果

我试图以编程方式设置swift中乘数的约束,当我设置值时,它只是给我错误,"不能分配给这个表达式的结果"......

我用一个IBOutlet声明了NSLayoutConstraint,然后设置乘数,就像我对另一个常量一样,这很好,但是这个不会接受它......

@IBOutlet weak var clockWidthConstraint: NSLayoutConstraint!

override func updateViewConstraints() {
    super.updateViewConstraints()

    confirmTopConstraint.constant = 40.0
    clockWidthConstraint.multiplier = 0.1  // Gives me the error!

    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

constraints ios autolayout nslayoutconstraint swift

7
推荐指数
1
解决办法
9411
查看次数

以编程方式更改中心X/Y的Alignement约束的乘数

如何以最简单的方式以编程方式更改乘数?

在此输入图像描述

对于Swift 2.0

constraints ios swift

5
推荐指数
1
解决办法
6903
查看次数

Deactive NSLayoutConstraint iOS7

我正在开发一个目标为iOS7的应用程序,当我将应用程序部署到iPhone 4时出现以下错误.

[NSLayoutConstraint setActive:]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

我调查了这个,结果setActive是在iOS8中引入的.问题是,setActive约束的替代方法是什么,大约是iOS7?我需要以编程方式操纵约束,似乎无法在任何地方找到答案.

iphone objective-c ios nslayoutconstraint ios7

4
推荐指数
1
解决办法
1211
查看次数

自动布局以编程方式修改约束的乘数

如何以编程方式修改约束的乘数?我设置了以下内容:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_button attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0.0]];
Run Code Online (Sandbox Code Playgroud)

我需要将其修改为:

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:_button attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:1.0 constant:0.0]];
Run Code Online (Sandbox Code Playgroud)

constraints objective-c ios autolayout

3
推荐指数
1
解决办法
1万
查看次数

在设备轮换时保持autolayout约束活动状态

我注意到,当我以编程方式更新自动布局约束时,在旋转屏幕时会恢复所有更改.

重现问题:

  • 带有UIView的基本Storyboard界面和2个约束:

    1. width等于superview.width(乘数1)有效
    2. 宽度等于superview.width(乘数1/2)禁用
  • 使用IBOutlet创建并链接这两个约束

  • 以编程方式禁用第一个约束并启用第二个约束.
  • 旋转设备,第一个约束处于活动状态,第二个约束处于禁用状态.

对我来说似乎是一个错误.

你怎么看 ?

截图:

故事板: 在此输入图像描述

约束#1:

在此输入图像描述

约束#2:

在此输入图像描述

ios autolayout

3
推荐指数
1
解决办法
1676
查看次数