Я получаю следующие ошибки при попытке установить ярлык Предпочтительная ширина на Автоматически в раскадровке:
Атрибут недоступен: Автоматическая предпочтительная максимальная ширина макета недоступна в версиях iOS до 8.0
Поскольку мне нужен мой макет для работы с iOS 7 и 8, я планировал сделать следующее:
- Задайте значение Явно в раскадровке.
- На iOS 7, установите значение в явную, вычисленную ширину программно.
- В iOS 8, установите значение в автоматическом режиме.
1 и 2 легко. Как сделать шаг 3? Есть ли константа, которую я могу установить?
Вот что я пробовал до сих пор...
Если вы установите значение в автоматическом режиме на раскадровке, и вы проверите preferredMaxLayoutWidth
, вы увидите, что это 0
.
Однако попытка установить его на 0, даже если он говорит, что он уже равен 0, не работает должным образом (например, метка остается как одна строка). Например, я попытался установить значение автоматический в раскадровке, а на viewDidLoad
я выполнил следующее:
self.label.preferredMaxLayoutWidth = self.label.preferredMaxLayoutWidth;
Когда я не запускаю вышеуказанный код, метка имеет правильный размер. Однако, когда я запускаю вышеуказанный код (который ничего не должен делать), он остается как одна строка (нежелательное поведение).
В файле заголовка для UILabel говорится:
// Support for constraint-based layout (auto layout)
// If nonzero, this is used when determining -intrinsicContentSize for multiline labels
@property(nonatomic) CGFloat preferredMaxLayoutWidth NS_AVAILABLE_IOS(6_0);
Что касается константы, я ничего не мог найти. Самая близкая константа, о которой я могу думать, - это UITableViewAutomaticDimension
, которая не работает.
Вот что выглядит раскадровка....
Автоматическая ширина макета:
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" text="Foo" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bis-iG-g4l">
<rect key="frame" x="20" y="116" width="560" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
Явная ширина макета:
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" text="Foo" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="560" translatesAutoresizingMaskIntoConstraints="NO" id="Bis-iG-g4l">
<rect key="frame" x="20" y="116" width="560" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
Единственное отличие состоит в том, что последнее имеет:
preferredMaxLayoutWidth="560"