Se è necessario impostare valore decimale costante nella storyboard che non dipende dalla scala dello schermo, è possibile utilizzare user defined runtime attributes
, ad esempio per vincolo costante sarebbe:
Percorso chiave: constant
tipo: Number
Valore: 0,5
Se si vuole fare un delimitatore facendo una vista con larghezza di 1 pixel su @ 2x e @ dispositivi 3x è possibile utilizzare un vincolo che imposta la larghezza/altezza di visualizzare e impostare la sua classe alla tua sottoclasse vincolo. Esempio di tale sottoclasse: 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
Per calcolare il valore solo una volta:
- (CGFloat)constant {
static CGFloat onePixel = 0;
return onePixel?:(onePixel = 1./[UIScreen mainScreen].scale);
}
che avrebbe cambiato il 'constant' del vincolo ogni volta che la vista Layout sue vedute (un sacco di volte). La 'costante' dovrebbe essere impostata solo una volta e poi si ridisegnerà automaticamente su' layoutSubviews'. O mi sta sfuggendo qualcosa? –
L'impostazione di una costante non attiva un layout. La documentazione di Apple dice: "Sovrascrivi i metodi viewWillLayoutSubviews o layoutSubviews per modificare i risultati restituiti dal motore di layout." [collegamento] (https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ModifyingConstraints.html#//apple_ref/doc/uid/TP40010853-CH29-SW4) – adamup
Forse mi sono espresso male . Intendevo dire che dovresti chiamare 'constraint.constant = value;' ** una volta ** e poi chiamare '[self.view setNeedsLayout];' e lasciare che il sistema di layout faccia il suo esempio. Perché reimpostare il valore su ogni ciclo di layout? –