UILabel Вопрос. Выравнивание перекрывающихся UILabels

У меня есть два UILabels. что я хочу наложить одно на другое. Назовите метки «под» и «над».

над: A C E G

под: Б Д Ф

Текст UILabel "over" будет выделен красным цветом. «Под» будет синим цветом. Визуальным эффектом будет чередование цветов между последовательными буквами.

Какие средства управления доступны мне, чтобы точно выровнять текст на каждой этикетке, чтобы осуществить это?

Привет, Дуг


person dugla    schedule 03.09.2009    source источник


Ответы (2)


Я согласен с fbrereton. Это кажется очень сложным путем к достижению цели. Ознакомьтесь с дополнениями NSString UIKit. чтобы научиться рисовать свои собственные строки и раскладывать символы самостоятельно в своем собственном -drawRect:. У вас будет гораздо больший контроль, и код не должен быть таким сложным. У iPhone не очень хорошая поддержка макета (ничего такого, что предлагает Mac), но для чего-то такого простого это не должно быть слишком плохо.

person Rob Napier    schedule 03.09.2009

Вы должны убедиться, что используемый вами шрифт является моноширинным, иначе символы не будут выстраиваться точно так, как вы надеетесь, если между ними будет только пробел. (Я полагаю, что в iPhone OS есть моноширинный шрифт для машинописного ввода; YMMV.) Также вам нужно будет поставить префикс underLabel с пробелом, чтобы приведенный ниже код работал.

Чтобы сопоставить один UILabel поверх другого, попробуйте:

overLabel.opaque = NO; // so you can see what is under overLabel
overLabel.textColor = [UIColor redColor];
overLabel.backgroundColor = [UIColor clearColor];
underLabel.frame = overLabel.frame;
underLabel.textColor = [UIColor blueColor];

Обратите внимание, что в приведенном выше коде underLabel принимает фрейм overLabel, потому что фрейм последнего шире; если бы это было наоборот, overLabel было бы обрезано.

При всем при этом я готов поспорить, что есть лучший способ снять шкуру с этой конкретной кошки. Это решение кажется мне очень «круглым штифтом, квадратным отверстием».

person fbrereto    schedule 03.09.2009