У меня есть несколько ячеек табличного представления, которые должны отображать некоторые простые HTML с нашего сервера. Я преобразую HTML в NSAttributedString, чтобы он мог отображаться в объектах UILabel в ячейках. Но когда табличное представление рисует ячейки, объекты UILabel, кажется, имеют некоторые разрывы строк, добавленные в их конец. Обратите внимание на дополнительное место здесь:
(Кстати, рис предоставляет две ячейки таблицы, потому что я пробовал две разные формы HTML, и в в обоих случаях, кажется, вставлены разрывы строк)
Я подумал, что, возможно, это из-за моего макета, что, возможно, UILabel был вынужден компоновкой макета и не может самостоятельно изменять размеры / уменьшать размер в зависимости от назначенного ему текста. Но когда я добавляю к той же метке простую строку NSAttributedString, созданную следующим образом:
sRet = [[NSAttributedString alloc] initWithString:@"[Dummy text string 111]"];
(желтый) UILabel действительно сжимается в ответ примерно так:
в значительной степени демонстрирует, что мой макет позволяет UILabel свободно изменять размер в соответствии с назначенным ему текстом.
Ниже приведен HTML-код, назначаемый меткам и полученным значениям NSAttributedString, когда я регистрирую их в консоли. Они соответствуют тому, что вы видите на желтых объектах UILabel на первом изображении выше. Вот HTML, преобразуемый в приписанную строку и присвоенный:
<h2>Student did poorly</h2>
<p><span style="font-family:comic sans ms,cursive;"><span style="font-size:14px;">Student did ok</span></span></p>
А вот соответствующие приписанные строки:
Student did poorly
{
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x7fce3f8798e0> font-family: \"TimesNewRomanPS-BoldMT\"; font-weight: bold; font-style: normal; font-size: 18.00pt";
NSKern = 0;
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 22/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (null), Lists (null), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 2";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
}
Student did ok{
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x7fce3d5a96c0> font-family: \"Snell Roundhand\"; font-weight: normal; font-style: normal; font-size: 14.00pt";
NSKern = 0;
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 19/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
}
{
NSColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSFont = "<UICTFont: 0x7fce3d7959e0> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; font-size: 12.00pt";
NSKern = 0;
NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 15/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";
NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0 1 ";
NSStrokeWidth = 0;
}
Ни в html, ни в приписанных строках я не вижу причины, по которой объекты UILabel имеют такое дополнительное вертикальное пространство. Кстати, пара объектов UILabel в каждой ячейке (желтая и белая) содержатся в UIStackView, поэтому, возможно, это может как-то причинить вред. Но только четыре ограничения: конечный, ведущий, нижний и верхний, и, как упомянуто выше, размер метки можно корректно изменить, поэтому эти ограничения, похоже, не способствуют этому.