Выровняйте три UILabels рядом друг с другом, и каждая метка может быть многострочной

Я работаю над проектом, где мне нужно подстроить 3 UILabels рядом друг с другом. Позвольте мне объяснить это на примере.

Я имею, например, следующее предложение. "Tim Moore commented on the little bear story" Теперь мои три UILabels будут содержать:

LABEL 1 --> Tim Moore
LABEL 2 --> commented on
LABEL 3 --> the little bear story

другой пример:

Dave Smits likes the status "We and only we can me a knew future and only we nobody else can make changes, so don't stop now !"

LABEL 1 --> Dave Smits
LABEL 2 --> likes the status
LABEL 3 --> "We and only we can me a knew future and only we nobody else can make changes, so don't stop now !"

Как вы можете видеть во втором примере предложение намного дольше.

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

Я работаю в пользовательском UITableviewCell, который использует autolayout.

Любая помощь будет оценена!

Ответ 1

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

Ответ 2

Вы можете использовать этот фрагмент кода, чтобы выстроили свои ярлыки. Установите numberOfLines: 0, чтобы они были многострочными.

-(void)adjustLabels
{
    [self.label1 setText:@"Dave Smits"];
    [self.label2 setText:@"likes the status"];
    [self.label3 setText:@"We and only we can me a knew future and only we nobody else can make changes, so don't stop now !"];

    [self.label1 setNumberOfLines:0];
    [self.label1 sizeToFit];
    CGRect frameFor2 = self.label2.frame;
    frameFor2.origin.x = self.label1.frame.origin.x + 3.f; //add some space between labels
    [self.label2 setFrame:frameFor2];

    [self.label2 setNumberOfLines:0];
    [self.label2 sizeToFit];
    CGRect frameFor3 = self.label3.frame;
    frameFor3.origin.x = self.label2.frame.origin.x + 3.f;
    [self.label3 setFrame:frameFor3];

    [self.label3 setNumberOfLines:0];
    [self.label3 sizeToFit];
}

sizeToFit метод не работает с автоматической компоновкой, вы можете посмотреть на другой ответ из SO, чтобы исправить его.