В моем проекте Xcode 6.2 Swift у меня проблема с автоматической компоновкой (я также использую классы размера) что я не могу понять ...Проблема с автоматической компоновкой с UIButton с длинным заголовком, которая сжимает выровненный сегментированный элемент управления, который должен иметь фиксированную ширину и никогда не должен сжиматься
В Main.storyboard У меня есть вид, содержащий среди других элементов интерфейса UIButton
и UISegmentedControl
, которые расположены на одной и той же высоте на противоположной стороне Посмотреть.
Я устанавливаю вручную все ограничения в Interface Builder (нет в коде), и каждое мое представление работает нормально, за исключением этого случая (и эта конкретная проблема возникает только при наличии длинного текста).
Кнопка выравниваются по левой границе зрения и его ограничение:
- Leading пространства для SuperView == 0
- Продольного пространства для сегментированного контроллера> = 8
- сверху и снизу пространство для других элементов интерфейса == 8
Сегментированный контроллер (имеющий 2 сегмента) выровнен по правому краю представления, а его ограничения:
- Скользящий пространство SuperView == 0
- Ведущее место для кнопки> = 8
- верхней и нижней части пространства для других элементов интерфейса == 8
Кнопка в раскадровке имеет название «Некоторое название», но на самом деле фактическое название всегда устанавливается в коде в ViewWillAppear
:
myButton.setTitle(aStringThatSometimesIsPrettyLong, forState: .Normal)
Визуальный результат, который мне нужно достичь (на каждом возможном устройстве и ориентации), состоит в том, что заголовок Button, который я установил в коде, хотя он может быть хорошо отображен в интерфейсе, никогда не должен компрометировать размер сегментированного элемента управления, сжимая метки двух сегментов. Итак, я хочу, чтобы размер сегментированного элемента управления был исправлен, и я готов принять тот факт, что заголовок Button, если он длинный, может быть усечен точками. Вместо этого, независимо от того, что я пытаюсь (и я объясню, что я пробовал в данный момент) , когда заголовок Button очень длинный, он не усечен, вместо этого сегментированный элемент управления сжат, и поэтому его метки сегментов сегментов усечены ,
До сих пор я пытался, по отдельности и вместе, эти шаги:
- Добавление ширины минимального ограничения сегментированного управлению.
- Увеличение (в шагах до 1000) Сопротивление сжатия содержимого сегментированного элемента управления при уменьшении соответствующего значения кнопки.
- Увеличенный (до 1000) приоритет использования содержимого кнопки.
- Я думаю, что я не могу установить максимальную ширину для кнопки, потому что она может растягиваться в зависимости от набора заголовков в коде и, что более важно, от того, на каком устройстве работает приложение.
Моя самая большая проблема в том, что, независимо от того, что я стараюсь, когда я запустить приложение, я всегда получаю такое же поведение (название кнопки полностью показанное, снимите усечен, и сжатый сегментированный контроль). Кажется, что добавление этих ограничений ничего не меняет, и мне никогда не приходило в голову с помощью Auto-layout ... возиться, много, но никаких ограничений на добавление изменений, это ново!
Возможно, проблема заключается в том, что название кнопки установлено в ViewWillAppear
, а не в раскадровке, но мое приложение не будет работать должным образом, если я не смог бы установить его заголовок в коде.
Последнее, но очень важно, я должен признать, что пока я до сих пор не получал классы Auto-layout и Size, работающие на всех устройствах и ориентациях для всех (более 10) контроллеров просмотра моего приложения, я На самом деле я никогда не писал ни одной строки кода для классов Auto.layout и Size: Я сделал все в интерфейсе Builder и, если возможно, мне очень понравилось бы продолжать этот путь.
Любое предложение действительно было бы действительно оценено!
Спасибо заранее,
Cesare
Похоже, вы пробовали правильные вещи. А именно, он должен работать, чтобы уменьшить приоритет устойчивости к горизонтальному сжатию кнопки ниже, чем для сегментированного управления. Что нужно попробовать: запишите «intrinsicContentSize» сегментированного элемента управления; возможно, он не может получить собственный размер из своего контента. Запишите «ограничения» сегментированного элемента управления: «ЭффектLayoutForAxis: UILayoutConstraintAxisHorizontal». –
@KenThomases Большое спасибо, проблема действительно была сегментированным элементом управления intrinsicContentSize, теперь все в порядке. Я очень ценю вашу помощь, еще раз спасибо! Мне жаль, что я не могу принять ваш ответ, так как это комментарий ... Счастливая Пасха! – cdf1982
Добро пожаловать. Из любопытства, как сегментированный контроль настроил так, что он не имел собственного размера? –