risposta

6

Dev'essere programmato, credo. A partire da Xcode 6.3, i valori della costante di vincolo sembrano essere limitati ai numeri interi nell'editor storyboard (diversamente dai valori moltiplicatori, che possono essere decimali).

Per Googler, ecco come fare:

Per specificare un valore decimale per un vincolo definito in uno storyboard, è possibile impostare la proprietà costante di un vincolo iVar. Ecco un esempio di impostazione di un vincolo di altezza per 0.5f:

nell'intestazione:

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

quindi collegare l'IBOutlet al vincolo nello storyboard.

Nell'implementazione:

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

Questo è tutto!

+0

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? –

+0

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

+0

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? –

0

dovrei farlo in:

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

Digitare il valore decimale desiderato con un leader 0.

esempio 0.9, non .9

3

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); 
} 
20

Sì, è possibile.

  1. Inserire il valore con un suffisso "f" in questo modo: enter image description here

  2. fare clic su Priorità. notare come le effettive variazioni di valore vincolo a 0,5: enter image description here

  3. premere Esc
+0

In Xcode 7 round a 0, sembra il modo più affidabile è quello di impostarlo nel codice – Digitech

+1

Questo è testato e funziona su Xcode 7.3.1. Assicurati di seguire le istruzioni accuratamente, per quanto possa sembrare strano. – AmitP

+0

Questo è strano ma funziona anche in Xcode versione 8.3.1 (8E1000a) –

Problemi correlati