Я создаю представление iOS, которое отображает различные статические текстовые элементы. XIB выглядит следующим образом:
Он использует четыре метки для заголовка, метки времени, тела и нижнего колонтитула. Каждое представление привязывается к родственному представлению над ним по вертикали и привязывается слева/справа от родительского представления. Все метки имеют фиксированную высоту, за исключением тела, которое имеет высоту >= и количество строк, установленное на 0, с «переносом слов» в качестве стиля переноса строк. Родительским представлением является UIScrollView.
На айфоне вроде нормально:
Однако на iPad это выглядит так:
Хм? Откуда берется все это дополнительное вертикальное пространство в этикетке тела? Xib и его контроллер представления идентичны между iPhone и iPad (на данный момент нет специального кода для iPad). Я обнаружил, что вертикальное пространство напрямую связано с количеством переносов строк, отображаемых меткой. Если строки не переносятся, нет дополнительного вертикального пространства. Если переносятся только несколько строк, появляется небольшое дополнительное пространство по вертикали. Если почти каждая строка переносится, что ж, вот как это выглядит.
Прежде всего, есть идеи, почему UILabel ведет себя таким образом?
Во-вторых, если я не могу заставить его прекратить это делать, как я могу обойти это?
Я уже пробовал несколько вещей. Если я вызову [bodyLabel sizeToFit] внутри -viewDidLayoutSubViews, тогда он исправит метку, но не исправит макет любого из одноуровневых представлений (например, метка нижнего колонтитула застревает в нижней части экрана, а не поднимается прямо под ним). тело). Любые попытки заставить все представление переразметить своих дочерних элементов после вызова sizeToFit игнорируются. Я также попытался определить размер UILabel, вычислив высоту на основе шрифта, что приводит к тому же поведению, что и -sizeToFit (хотя и с большим количеством кода).
Вместо этого замена Body UILabel на UITextView не дает мне странных проблем с вертикальным интервалом, но мне нужно вычислить высоту UITextView вручную (с использованием вычислений шрифта) и что-то об изменении размера UITextView в родительском UIScrollView делает так, чтобы UIScrollView просто отказывается прокручиваться (как будто он не знает, что его содержимое слишком велико для его границ).
Так что на данный момент я застрял. Было бы полезно даже просто объяснить, почему UILabel ведет себя таким образом на макете iPad.
[bodyLabel sizeToFit]
провоцирует то, что нижний колонтитул застревает внизу, вам нужно проверить свои ограничения, вероятно, есть одни, чтобы поместить нижний колонтитул внизу, и другие, которые заставляют вашу метку Body растягиваться по вертикали . - person CoderPug   schedule 04.09.2013