Я получаю следующие ошибки при попытке установить ярлык Предпочтительная ширина на Автоматически в раскадровке:
Атрибут недоступен: Автоматическая предпочтительная максимальная ширина макета недоступна в версиях 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"