Odpowiedz

6

To musi być zrobione programowo, jak sądzę. Od Xcode 6,3 wartości constraint constant wydają się być ograniczone do liczb całkowitych w edytorze storyboardów (w przeciwieństwie do wartości mnożnika, które mogą być liczbami dziesiętnymi).

Dla pracowników Google, oto jak to zrobić:

Aby określić wartość dziesiętną dla ograniczeniem określonym w serii ujęć, można ustawić stałą właściwość przymusu Ivar. Oto przykład ustawiania ograniczenie wysokości do 0,5F:

w nagłówku:

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

następnie podłączyć IBOutlet do ograniczeń w serii ujęć.

W swojej realizacji:

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

To wszystko!

+0

To by zmienić 'constant' z przymusu za każdym razem widok układy swoje poglądy (wiele razy). "Stała" powinna być ustawiona tylko raz, a następnie automatycznie wyrysować na "layoutSubviews". Czy może czegoś brakuje? –

+0

Ustawienie stałej nie wyzwala układu. Dokumentacja Apple mówi: "Zastąp metody viewWillLayoutSubviews lub layoutSubviews, aby zmodyfikować wyniki zwracane przez silnik układu." [link] (https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/ModifyingConstraints.html#//apple_ref/doc/uid/TP40010853-CH29-SW4) – adamup

+0

Może wyraziłem się źle . Chodzi mi o to, że powinieneś wywołać 'constraint.constant = value;' ** once **, a następnie wywołać '[self.view setNeedsLayout];' i pozwolić systemowi na wykonanie swojej rzeczy. Po co ponownie ustawiać wartość w każdym cyklu układu? –

0

miałbym to zrobić w:

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

Wpisz żądaną wartość dziesiętną z wiodących 0.

np 0,9, a nie 0,9

3

Jeśli trzeba ustawić stałą wartość dziesiętną w serii ujęć, które nie są zależne od skali ekranu, można użyć user defined runtime attributes, na przykład do ograniczenia stały byłoby:

Key Ścieżka: constant Typ: Number Wartość: 0,5


Jeśli chcesz złożyć ogranicznik, dokonując pogląd o szerokości 1 piksela na @ 2x i @ urządzeń 3x można stosować ograniczenia który ustawia widoku danych, szerokość/wysokość i ustawienie swoją klasę do swojej podklasa ograniczenia. Przykładem takiej podklasy: 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 

Aby obliczyć wartość tylko jeden raz:

- (CGFloat)constant { 
    static CGFloat onePixel = 0; 
    return onePixel?:(onePixel = 1./[UIScreen mainScreen].scale); 
} 
20

Tak, można.

  1. Wprowadź wartość z "f" Postfix tak: enter image description here

  2. Kliknij priorytet. Zauważ, że zmiany wartości skuteczne ograniczenie do 0,5: enter image description here

  3. Hit ESC
+0

W Xcode 7 rund na 0, wygląda na najbardziej niezawodny sposób, aby ustawić go w kodzie – Digitech

+1

To jest testowane i działa na Xcode 7.3.1. Upewnij się, że postępujesz zgodnie z instrukcjami dokładnie, tak dziwnie, jak może wyglądać. – AmitP

+0

To jest dziwne, ale działa również w Xcode w wersji 8.3.1 (8E1000a) –

Powiązane problemy