你能在IB中输入带小数的约束值吗?

时间:2014-12-16 08:32:36

标签: storyboard interface-builder autolayout nslayoutconstraint

这是希望它是一个简单的设置。

我无法在IB中输入带小数的约束值。每当我输入带小数的值并按回车键时,系统会对其进行舍入!

在代码中创建约束时,我没有这个问题。仅限于IB。

有办法吗?

5 个答案:

答案 0 :(得分:25)

是的,你可以。

  1. 使用" f"输入值。像这样的postfix: enter image description here

  2. 点击优先级。注意有效约束值如何变为0.5: enter image description here

  3. 按ESC

答案 1 :(得分:6)

我相信必须以编程方式完成。从Xcode 6.3开始,约束常量值似乎仅限于情节提要编辑器中的整数(与乘数值不同,可以是小数)。

对于Google员工,请按以下步骤操作:

要为故事板中定义的约束指定小数值,可以设置约束iVar的常量属性。以下是将高度约束设置为0.5f的示例:

在标题中:

@property (nonatomic, retain) IBOutlet NSLayoutConstraint *separatorHeightConstraint;

然后将IBOutlet连接到故事板中的约束。

在您的实施中:

-(void)layoutSubviews {
    [super layoutSubviews];
    self.separatorHeightConstraint.constant = 0.5f;
}

这就是全部!

答案 2 :(得分:3)

如果您需要在故事板中设置不依赖于屏幕比例的常量小数值,则可以使用user defined runtime attributes,例如对于约束常量,它将是:

关键路径:constant 输入:Number 价值:0,5

如果要通过在@ 2x和@ 3x设备上创建1像素宽度的视图来制作分隔符,可以使用约束来设置视图的宽度/高度,并将其类设置为您自己的约束子类。这种子类的示例: OnePixelWidthConstraint.h:

#import <UIKit/UIKit.h>

@interface OnePixelWidthConstraint : NSLayoutConstraint
@end

OnePixelWidthConstraint.m:

#import "OnePixelWidthConstraint.h"

@implementation OnePixelWidthConstraint

- (CGFloat)constant {
    return 1./[UIScreen mainScreen].scale;
}

@end

仅计算一次值:

- (CGFloat)constant {
    static CGFloat onePixel = 0;
    return onePixel?:(onePixel = 1./[UIScreen mainScreen].scale);
}

答案 3 :(得分:0)

我会这样做:

- (void)updateConstraints {
   self.separatorHeightConstraint.constant = 0.5f;
   [super updateConstraints];
}

答案 4 :(得分:-1)

使用前导0键入所需的十进制值。

e.g。 0.9,而不是.9