2015-06-26 14 views
12

Mam wielki czas zastanawiając się, jak zrobić margines dwóch obiektów proporcjonalny. Jeśli wybiorę format obrazu na Xcode, daje mi to możliwość regulacji wysokości proporcjonalnej wysokości ekranu mojego obiektu. i to nie moja sprawa. Chcę, aby margines między przyciskiem a ekranem był proporcjonalny do wysokości ekranu. I chcę, aby zostało to zrobione przy użyciu Xcode "No Code". What I am seeking to doXcode AutoLayout, Make Margin proporcjonalna do wysokości

Twoje wsparcie jest bardzo cenne.

Dziękuję

+0

sprawdź http://stackoverflow.com/a/30589956/3633534 – Sujay

+0

Utwórz margines za pomocą przezroczystego widoku między przyciskiem Gotowe i u dołu. Przypnij widok do boków, przycisku Gotowe i dołu. Teraz nadaj mu współczynnik proporcji oparty na wysokości, którą chcesz mieć dla iPhone 4. Chociaż nie jest idealny, będzie skalował się wraz z szerokością, która na ogół skaluje się w tej samej proporcji co wysokość. Więc jeśli zrobiłeś apsydę tak wysoką na 100 na iPhone 4, to byłoby 100 na iPhonie 5, 117 na iphone 6 i 129 w iphone6 ​​+ i 240 na iPadzie. Tak więc, oprócz iPhone'a 5, daje ci to, czego chcesz. –

+0

@RoryMcKinnel Czy jest jakikolwiek czystszy sposób "bezpośredni" to zrobić? Czuję, że jest to obejście problemu: –

Odpowiedz

7

Użyj właściwości mnożnikowy NSLayoutConstraint!

Najpierw ustaw ograniczenie równej wysokości z widoku do jego superwizji za pomocą mnożnika, który chcesz. Możesz użyć Ctrl + przeciągnij z widoku do superview.

Następnie ustaw kolejne ograniczenie na 0 z góry widoku na super widok i równą szerokość z mnożnikiem na 1 z widoku na super widok.

Gotowe!

+0

Więc masz na myśli to, że jedynym sposobem na zrobienie tego jest skupienie się na wysokości zamiast na marginesach? –

2

Wiem, że nie chcesz kodu, ale myślę, że najlepiej będzie użyć ograniczenia wysokości. Dodaj ograniczenie wysokości do marginesu i CTRL przeciągnij go do pliku nagłówka, żeby coś takiego:

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *myMarginHeightConstraint; 

Trzeba właściwość, która zawiera część wysokości ekranu na marginesie:

@property CGFloat myHeightFraction; 

Następnie dodaj to w viewDidLoad.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.myHeightFraction = 0.1; // e.g to get margin at 10% of height 
    myMarginHeightConstraint.constant = myHeightFraction * [[UIScreen mainScreen] bounds].size.height; 

    ... 
} 
+0

Nie sądzę, że to jest poprawne, ponieważ nie zaktualizuje to marginesu, jeśli zmieni się rozmiar widoku? Na przykład. przejście od orientacji pionowej do orientacji poziomej. – Paludis

+0

@Paludis Ten kod pokazuje tylko pomysł i nie obejmuje rotacji. Po obróceniu i utworzeniu wiązań o stałych rozmiarach w oparciu o orientację, należy dodać nadpisania wymagane w ramach metody rotacji iw razie potrzeby dostosować wiązania. Układ następnie zajmuje się resztą w następnym cyklu układania. Możesz także zaimplementować zmianę w 'viewWillLayoutSubviews', która również obejmuje rotację. –

2

Dodaj przezroczysty widok i dostosuj go do wysokości. Powiąż przycisk Gotowe z tym przezroczystym widokiem. There można znaleźć, jak to zrobić.

Powiązane problemy