Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

[super viewDidLoad];

CGRect labelFrame = CGRectMake(0.0f,

0.0f,

100.0f,

23.0f);

self.myLabel = [[UILabel alloc] initWithFrame: labelFrame];

self.myLabel.text = @"iOS 7 Programming Cookbook";

self.myLabel.font = [UIFont boldSystemFontOfSize:14.0f];

self.myLabel.center = self.view.center;

[self.view addSubview: self.myLabel];

}

Теперь

запустим приложение и посмотрим, что происходит (рис. 1.46).

Рис. 1.46. Слишком длинная подпись, которая не умещается на экране

Как видите, текст (содержимое) подписи обрезается, а за ним идут точки, поскольку ширины поля для подписи недостаточно для того, чтобы уместился весь текст. Для решения этой проблемы можно было бы увеличить ширину, но что делать с высотой? А что, если мы хотим, чтобы текст переходил на следующую строку. Хорошо, увеличим высоту с 23.0f до 50.0f:

CGRect labelFrame = CGRectMake(0.0f,

0.0f,

100.0f,

50.0f);

Если сейчас запустить приложение, получится тот же самый результат, что и на рис. 1.46. Вы могли бы спросить: «Я увеличил высоту, так почему же текст не переходит на следующую строку»? Оказывается, у класса UILabel есть свойство numberOfLines, в котором нужно указать, на сколько строк должен разбиваться текст подписи, если в ширину для нее будет недостаточно места. Если задать здесь значение 3, то вы сообщите программе, что текст подписи должен занимать не более трех строк, если этот текст не умещается в одной строке:

— (void)viewDidLoad{

[super viewDidLoad];

CGRect labelFrame = CGRectMake(0.0f,

0.0f,

100.0f,

70.0f);

self.myLabel = [[UILabel alloc] initWithFrame: labelFrame];

self.myLabel.numberOfLines = 3;

self.myLabel.lineBreakMode = NSLineBreakByWordWrapping;

self.myLabel.text = @"iOS 7 Programming Cookbook";

self.myLabel.font = [UIFont boldSystemFontOfSize:14.0f];

self.myLabel.center = self.view.center;

[self.view addSubview: self.myLabel];

}

Теперь при запуске программы вы получите желаемый результат (рис. 1.47).

Рис. 1.47. Подпись, текст которой занимает три строки

Бывает, что вы не знаете, сколько строк понадобится, чтобы отобразить текст подписи. В таких случаях для свойства numberOfLines подписи задается значение 0.

Если вы хотите, чтобы рамка, в которой находится подпись, имела постоянные размеры, а размер шрифта корректировался так, чтобы он входил в отведенные границы, необходимо

задать для свойства adjustsFontSizeToFitWidth подписи значение YES. Например, если высота подписи равна 23.0f, как показано на рис. 1.46, то можно уместить шрифт подписи в этих границах. Вот как это делается:

— (void)viewDidLoad{

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

CGRect labelFrame = CGRectMake(0.0f,

0.0f,

100.0f,

23.0f);

self.myLabel = [[UILabel alloc] initWithFrame: labelFrame];

self.myLabel.adjustsFontSizeToFitWidth = YES;

self.myLabel.text = @"iOS 7 Programming Cookbook";

self.myLabel.font = [UIFont boldSystemFontOfSize:14.0f];

self.myLabel.center = self.view.center;

[self.view addSubview: self.myLabel];

}

1.18. Оформление UILabel

Постановка задачи

Требуется возможность оформлять внешний вид подписей — от настройки теней до настройки выравнивания.

Решение

Пользуйтесь перечисленными далее свойствами класса UILabel в зависимости от стоящей перед вами задачи.

• shadowColor — свойство типа UIColor. Как понятно из названия, оно указывает цвет отбрасываемой тени для подписи. Устанавливая это свойство, вы должны установить и свойство shadowOffset.

• shadowOffset — это свойство типа CGSize. Оно указывает размер отступа между тенью и текстом. Например, если вы зададите для этого свойства значение (1, 0), то тень будет находиться на одну точку правее текста. Если задать значение (1, 2), то тень окажется на одну правее и на одну точку ниже текста. Если же установить значение (-2, -10), то тень будет отображаться на две точки левее и на десять точек выше текста.

• numberOfLines — свойство представляет собой целое число, указывающее, сколько строк текста может включать в себя подпись. По умолчанию значение этого свойства равно 1. Таким образом, любая создаваемая вами подпись по умолчанию может обработать одну строку текста. Если вы хотите сделать подпись из двух строк, задайте для этого свойства значение 2. Если требуется, чтобы в вашем текстовом поле могло отображаться неограниченное количество текстовых строк, либо вы просто не знаете, сколько строк текста в итоге понадобится отобразить, это свойство должно иметь значение 0. (Лично я нахожу это очень странным. Вместо NSIntegerMax или чего-то подобного в Apple решили обозначать неограниченное количество нулем!)

• lineBreakMode — это свойство относится к типу NSLineBreakMode и указывает способ перехода текста на новую строку внутри текстового поля. Например, если присвоить этому свойству значение NSLineBreakByWordWrapping, то слова разрываться не будут, но если по ширине будет мало места, то текст станет переходить на новую строку. Напротив, если задать для этого свойства значение NSLineBreakByCharWrapping, то при переходе на новую строку может происходить разрыв слова. Вероятно, NSLineBreakByCharWrapping стоит использовать лишь при жестком дефиците места и необходимости уместить на экране как можно больше информации. Я не рекомендую пользоваться этим свойством, если, конечно, вы стремитесь сохранить пользовательский интерфейс аккуратным и четким.

Поделиться:
Популярные книги

Ключи мира

Кас Маркус
9. Артефактор
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Ключи мира

Первый среди равных. Книга XIII

Бор Жорж
13. Первый среди Равных
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Первый среди равных. Книга XIII

Отморозок 1

Поповский Андрей Владимирович
1. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 1

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4

Сильнейший Столп Империи. Книга 5

Ермоленков Алексей
5. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 5

Мы - истребители

Поселягин Владимир Геннадьевич
2. Я - истребитель
Фантастика:
альтернативная история
8.55
рейтинг книги
Мы - истребители

Надуй щеки! Том 2

Вишневский Сергей Викторович
2. Чеболь за партой
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Надуй щеки! Том 2

На границе империй. Том 10. Часть 8

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 8

Печать Пожирателя 3

Соломенный Илья
3. Пожиратель
Фантастика:
городское фэнтези
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Печать Пожирателя 3

Локки 8. Потомок бога

Решетов Евгений Валерьевич
8. Локки
Фантастика:
фэнтези
боевая фантастика
героическая фантастика
попаданцы
5.00
рейтинг книги
Локки 8. Потомок бога

Газлайтер. Том 28

Володин Григорий Григорьевич
28. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 28

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Мусорщик

Поселягин Владимир Геннадьевич
3. Наемник
Фантастика:
боевая фантастика
космическая фантастика
8.55
рейтинг книги
Мусорщик