2015-01-05 3 views
1

Я программирую для объектива IOS в течение долгого времени, и все же в таких ситуациях мне кажется безумным начать вычислять расстояния каждый раз, когда я выполняю простое действие пользовательского интерфейса, так:Вставка представления между двумя другими видами

Скажем, у меня есть страница с несколькими лейблами:

NAME : MATAN 
MUSIC : TECHNO 
AGE : 26 

в настоящее время в некоторых конкретных случаях, я хотел бы вставить еще одну метку между «MUSIC» и «возраст».

Обычно я проверяю высоту новой метки и перемещаю ярлык «AGE» вниз по коду.

Это CRAZY, что я не нашел лучшего способа, чем это, потому что, имея дело с более сложными видами, это становится ЖЕСТОЙ!

Любые предложения?

+0

Я хотел бы предложить поставить дополнительную этикетку и установите его спрятанное = ДА, то и может манипулировать с ним – mokiSRB

ответ

0

Сомон упоминается с использованием ограничений. Это должно заставить вас в правильном направлении для такого рода вещи

self.automaticallyAdjustsScrollViewInsets = NO; 

UILabel *label1 = [[UILabel alloc] init]; 
UILabel *label2 = [[UILabel alloc] init]; 

label1.text = @"NAME : MATAN"; 
label2.text = @"AGE : 26"; 

[self.view addSubview:label1]; 
[self.view addSubview:label2]; 

[label1 setTranslatesAutoresizingMaskIntoConstraints: NO]; 
[label2 setTranslatesAutoresizingMaskIntoConstraints: NO]; 

NSDictionary * viewsDictionary = NSDictionaryOfVariableBindings(label1, label2); 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[label1]-20-|" options:0 metrics: 0 views:viewsDictionary]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[label2]-20-|" options:0 metrics: 0 views:viewsDictionary]]; 
NSArray * vertConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[label1]-10-[label2]" options:0 metrics: 0 views:viewsDictionary]; 

[self.view addConstraints:vertConstraint]; 

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 

    UILabel *label3 = [[UILabel alloc] init]; 
    label3.text = @"MUSIC : TECHNO"; 
    [label3 setTranslatesAutoresizingMaskIntoConstraints: NO]; 

    [self.view addSubview:label3]; 

    NSDictionary * viewsDictionary = NSDictionaryOfVariableBindings(label1, label2, label3); 

    [self.view removeConstraints:vertConstraint]; 

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[label3]|" options:0 metrics: 0 views:viewsDictionary]]; 

    NSArray * newVertConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[label1]-10-[label3]-10-[label2]" options:0 metrics: 0 views:viewsDictionary]; 

    [self.view addConstraints:newVertConstraint]; 

}); 
+0

Спасибо за ваше время – MCMatan

2

Я предлагаю вам поставить все это в UITableView, который предназначен именно для такого рода вещи, и имеет механизм для вставки/удаления клеток ..

+0

Спасибо за ответ! Это интересный ответ. Так вы действительно строите все свои представления в виде таблицы? Даже если дизайн совсем не похож на список? Только так вы можете реализовать такую ​​функциональность? – MCMatan

+0

@PiratM: да, вы можете, его просто у вас будет немного больше кода для этого ... –

+0

@PiratM yep, точно. TableView может быть только 150px wide или 200 tall or whatever, без проблем. Можете войти в UIPopover, всевозможные подходы. Все еще выглядит для меня каким-то списком;) – Jef

0

Вы всегда можете использовать tableViews, чтобы сделать его более легким.

Если нет, то прочитайте что-нибудь о ограничениях. Возможно, вы уже знаете об этом. Но это большая помощь, если вы можете сделать это правильно.

Read more about constraints here

1

UITableView для такого использования является своего рода излишеством данного количества шаблонного кода, вы должны добавить. Лучшим решением является использование двух перекрывающихся контроллеров представления контейнеров, каждый из которых содержит правильную фиксированную компоновку необходимых меток. Вы можете программно включить и отключить два контейнера соответственно. Смотрите Apple, руководство ниже для некоторых примеров:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

Смежные вопросы