2016-03-24 2 views
0

Я добавил UIView как заголовок UITableView, но когда я это сделал, мои ограничения развалились. Я пытаюсь получить мой chapterVerseLabel по центру внутри круга, так:Центрирование UILabel внутри заголовка UITableView

enter image description here

выполнить это, таким образом, до сих пор делают это:

var allConstraints = [NSLayoutConstraint]() 
    let views = ["tableView" : tableView, "containerView" : containerView, "chapterVerseLabel" : chapterVerseLabel] 
    allConstraints += NSLayoutConstraint.constraintsWithVisualFormat("V:|-70-[chapterVerseLabel]-70-|", options: [], metrics: nil, views: views) 
    NSLayoutConstraint.activateConstraints(allConstraints) 

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

Все идеи приветствуются.


Update

Я попытался добавить значение .CenterX:

let leftConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterY, relatedBy: .Equal, toItem: containerView, attribute: .CenterY, multiplier: 1.0, constant: 0.0) 
    containerView.addConstraint(leftConstraint) 
    let rightConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterX, relatedBy: .Equal, toItem: containerView, attribute: .CenterX, multiplier: 1.0, constant: 0.0) 
    containerView.addConstraint(rightConstraint) 

Но это результат:

enter image description here

Прямо сейчас, chapterVerseLabel сидит в моей конте inerView, который назначается как tableView.tableHeaderView. Например:

tableView.tableHeaderView = containerView 

Любые идеи?

+0

1: Вы уверены, что ваш ярлык является подвидью заголовка, а не каким-то другим видом внутри? 2: Вероятно, вам нужно ограничить centerX в дополнение к изменению ваших ограничений: 'V: | - (> = 70) - [chapterVerseLabel] - (> = 70) - |' –

+0

@DanielGalasko Извините, вы абсолютно правы. Это подзаголовок 'containerView', поэтому мои ограничения сломались. Изначально у меня они работали нормально, как вид отдельно от моего tableView. И как только я сделал их заголовком UITableView, все мои ограничения развалились. – Trip

+0

рад помочь :) –

ответ

2

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

NSLayoutConstraint *yCS =[NSLayoutConstraint constraintWithItem:chapterVerseLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]; 
[containerView addConstraint:yCS]; 

NSLayoutConstraint *xCS =[NSLayoutConstraint constraintWithItem:chapterVerseLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:containerView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]; 
[containerView addConstraint:xCS]; 

Предполагая, что containerView - это ваш заголовок, который возвращается из метода делегата headerforView. Вы должны указать высоту и ширину этикетки.

+0

Ваш ответ имеет большой смысл. Я экспериментирую с этим, но я думаю, что моя проблема в том, что chapterVerseLabel находится внутри containerView, что является заголовком заголовка 'self.tableView'. Я обновил свой ответ выше, указав подробнее. Возможно, я должен был включить его раньше. мои извинения .. Большое спасибо за вашу помощь. – Trip

+0

А как раз понял это на основе вашего ответа. Я добавил ограничение на tableView, и он отлично работает! – Trip

0

В центре есть uiview. Если вы хотите добавить представление (1/4) к круговому виду в центре, вы не можете сделать это с визуальным форматом. Я предполагаю, что вы хотите сосредоточиться на chapterVerseLabel. Итак:

chapterVerseLabel.translatesAutoresizingMaskIntoConstraints = false 
yourCircularView.addsubView(chapterVerseLabel) 
let xCenterConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterX, relatedBy: .Equal, toItem: view2, attribute: .CenterX, multiplier: 1, constant: 0) 
superview.addConstraint(xCenterConstraint) 

let yCenterConstraint = NSLayoutConstraint(item: chapterVerseLabel, attribute: .CenterY, relatedBy: .Equal, toItem: view2, attribute: .CenterY, multiplier: 1, constant: 0) 
superview.addConstraint(yCenterConstraint) 
+0

что такое 'view2' в вашем ответе? – Trip

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