这是希望它是一个简单的设置。
我无法在IB中输入带小数的约束值。每当我输入带小数的值并按回车键时,系统会对其进行舍入!
在代码中创建约束时,我没有这个问题。仅限于IB。
有办法吗?
答案 0 :(得分:25)
答案 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