Ответ 1
Да, вы можете.
Здесь нужно надеяться, что это простая настройка.
Я не могу ввести значение ограничения с десятичными знаками в IB. Всякий раз, когда я вводим значение с десятичными знаками и нажимаю Enter, система обходит его!
У меня нет этой проблемы при создании ограничений в коде. Только в IB.
Есть ли способ?
Да, вы можете.
Это должно быть сделано программно, я считаю. Начиная с Xcode 6.3, константы константы ограничения ограничены целыми числами в редакторе раскадровки (в отличие от значений множителя, которые могут быть десятичными).
Для гуглеров, вот как это сделать:
Чтобы указать десятичное значение для ограничения, определенного в раскадровке, вы можете установить свойство константы ограничения iVar. Здесь приведен пример установки ограничения высоты на 0,5f:
В заголовке
@property (nonatomic, retain) IBOutlet NSLayoutConstraint *separatorHeightConstraint;
затем подключите IBOutlet к ограничению в раскадровке.
В вашей реализации:
-(void)layoutSubviews {
[super layoutSubviews];
self.separatorHeightConstraint.constant = 0.5f;
}
Что все!
Если вам нужно установить постоянное десятичное значение в раскадровке, которое не зависит от масштаба экрана, вы можете использовать user defined runtime attributes
, например, для константы ограничения это будет:
Путь к ключу: constant
Тип: Number
Значение: 0,5
Если вы хотите сделать разделитель, создав представление с шириной 1 пиксель на устройствах @2x и @3x, вы можете использовать ограничение, которое устанавливает ширину/высоту представления и устанавливает его класс в свой собственный подкласс ограничения. Пример такого подкласса: 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);
}
Я бы сделал это в:
- (void)updateConstraints {
self.separatorHeightConstraint.constant = 0.5f;
[super updateConstraints];
}
Введите желаемое десятичное значение с ведущим 0.
например. 0,9, не 0,9