2015-02-12 2 views
0

Учитывая следующее изображение:позиционирование UILabel внутри UIView

три этикетки: «СЕГОДНЯ, СРЕДНЯЯ, на прошлой неделе» позиционируются динамически в моей ViewController. Это становится проблемой, когда приложение развертывается на других устройствах (например, iPhone 6 Plus), где они неправильно расположены.

Я знаю, что могу использовать AutoLayout, однако я бы хотел правильно расположить их, используя библиотеку, которая используется для создания 3-х активных баров.

Библиотека, которую я использую: CHCircleGauge.

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

enter image description here

Это код, я использую до сих пор, что является same code, который используется для позиционирования этикетки «6hrs» по центру по горизонтали и по вертикали.

NSDictionary *valueLabelDictionary = @{@"valueText" : self.valueTextLabel}; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[valueText]|" options:0 metrics:nil views:valueLabelDictionary]]; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[valueText]|" options:0 metrics:nil views:valueLabelDictionary]]; 

Я просто только добавил следующее, по крайней мере, быть в состоянии играть с динамическими ограничениями и может успешно позиционировать метки на том же месте. Но проблема в том, что я не совсем уверен, как позиционировать их как изображение выше.

NSDictionary *titleLabelDictionary = @{@"titleText" : self.titleTextLabel}; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[titleText]|" options:0 metrics:nil views:titleLabelDictionary]]; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[titleText]|" options:0 metrics:nil views:titleLabelDictionary]]; 

enter image description here

Любая помощь будет принята с благодарностью. Я все еще пытаюсь понять, как работают AutoLayout и ограничения.

UPDATE:

Для того, чтобы отобразить три кольца, которые я использую следующее:

var barView1 = CHCircleGaugeView(frame: CGRectMake(0, 0, 245, 245)) 
barView1.center = CGPointMake(self.gaugeView.frame.size.width/2, self.gaugeView.frame.size.height/2) 
barView1.gaugeWidth = 16 
barView1.gaugeTintColor = UIColor(red: 255/255, green: 202/255, blue: 76/255, alpha: 1) 
barView1.trackWidth = barView1.gaugeWidth 
barView1.trackTintColor = UIColor(red: 255/255, green: 202/255, blue: 76/255, alpha: 0.1) 
self.gaugeView.addSubview(barView1) 
barView1.setValue(0.10, animated: true) 

Тогда я просто добавить еще два, которые имеют меньший размер (с центром в gaugeView), чтобы поместиться внутри большее кольцо.

UPDATE 2:

Я закончил с использованием следующих с некоторыми constant дополнения:

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleTextLabel 
               attribute:NSLayoutAttributeTop 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeTop 
               multiplier:1.0 
                constant:-9.0]]; 

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleTextLabel 
               attribute:NSLayoutAttributeRight 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeCenterX 
               multiplier:1.0 
                constant:-14.0]]; 
+0

Вы контролируете толщину каждого кольца? –

+0

@AaronBrager: Да, это делается путем установки свойств 'gaugeWidth' и' trackWidth' объекта на '16'. – fuzz

ответ

3

Похоже, что вы новичок в Автокомпоновка, поэтому я попытаюсь указать вам в правильном направлении, не отдавая все это.

Вертикальные ограничения

Constrain Y каждого ярлыка в верхней части кольца вместо центра. Установите верхнее ограничение каждой метки на constant несколько иначе, чтобы они выглядели сложными друг на друга. constant должен быть trackWidth * (labelIndexNumber). Таким образом, они будут в конечном итоге 0, 16 и 32.

Таким образом, если вы когда-либо измените trackWidth, ваши метки будут автоматически отрегулированы.Возможно, вам придется немного поиграть с моими номерами, чтобы получить прописку справа.

Горизонтальные ограничения

Ограничить правую сторону каждой метки к центру зрения круга. Я не думаю, что вы можете использовать VFL для этого; вам придется использовать подробный синтаксис [NSLayoutConstraint constraintWithItem:….

этикетки Настройки

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

+0

Все, что вы сказали, имеет смысл, я поймаю трещину, увидев, могу ли я сам это сделать. Я очень ценю ваш подробный ответ. – fuzz

+0

@gotnull Я видел, что вы удалили свое наблюдение. Вы его работали? –

+0

Я обновил свой вопрос с помощью кода, который я использовал. Кажется, что он работает нормально, однако я просто использовал некоторые дополнения для констант, поскольку я не мог понять, что вы имели в виду при умножении. – fuzz

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