, bunun olacağını sabit kısıt için örneğin user defined runtime attributes
kullanabilirsiniz:
Anahtar Yol: constant
Tür: Number
Değer: 0,5
sen 2x ve 3x cihazlar @ sen görünümün genişlik/yükseklik ayarlar ve ayarlanmış bir kısıtlamayı kullanabilirsiniz @ 1-piksel genişliği ile bir görünüm yaparak sınırlayıcı olmak için kendi sınıfına kendi kısıtlama alt sınıfı. Böyle alt sınıfının örneği: 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
sadece bir kez değerini hesaplamak için: Evet, yapabilirsin
- (CGFloat)constant {
static CGFloat onePixel = 0;
return onePixel?:(onePixel = 1./[UIScreen mainScreen].scale);
}
. 'Constant' yalnızca bir kez ayarlanmalı ve daha sonra' layoutSubviews' üzerinde otomatik olarak yeniden çizilecektir. Yoksa bir şey mi özlüyorum? –
Bir sabitin ayarlanması bir düzeni tetiklemiyor. Apple'ın belgeleri şunları söylüyor: "Düzenleme motoru tarafından döndürülen sonuçları değiştirmek için viewWillLayoutSubviews veya layoutSubviews yöntemlerini geçersiz kıl." [link] (https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ModifyingConstraints.html#//apple_ref/doc/uid/TP40010853-CH29-SW4) – adamup
Belki kendimi yanlış söyledim . Demek istediğim 'constraint.constant = value;' ** bir kere ** ve sonra '[self.view setNeedsLayout]; 'ı çağırmalı ve layout sistemi kendi işini yapsın. Her bir düzen döngüsündeki değeri neden yeniden ayarlamalısınız? –