2014-09-18 2 views
6

Я использую Автокомпоновку,iOS8 различного поведение: Autolayout с view.transform = CGAffineTransformMakeScale (0,5, 0,5), вид не установлено правильно

Я хочу, чтобы сделать меньше UISwitch, а затем использовать view.transform = CGAffineTransformMakeScale(0.5, 0.5), чтобы понять это.

Существует другой вид над этим переключателем. ведущий Этого переключателя должны быть выровнены по переднему фронту этой точки зрения, и есть фиксированный вертикальное пространство между видом и переключателем, как следующая картина:

enter image description here Отн iOS7

Однако, есть другой вид на iOS8:

enter image description here Отн iOS8

Похоже, ограничения не применяются к этому коммутатору.

Но я назвал self.view.layoutSubviews() и self.view.layoutIfNeeded()

Это не работает.

Как включить этот переключатель всегда в правом нижнем углу вышеуказанного вида?

Здесь переключатель не масштабируется вниз

enter image description here

+0

Auto Layout не работает с уровнем преобразований –

+0

@MaxMacLeod Мне просто интересно, почему у одного и того же кода есть другое поведение на iOS7 и iOS8. Я думаю, вы имеете в виду этот ответ [ссылка] (http://stackoverflow.com/questions/12943107/how-do-i-adjust-the-anchor-point-of-a-calayer-when-auto-layout-is- будучи использованным/14105757 # 14105757), правильно? –

+0

Я предполагаю, что это ведет себя так, потому что внутренний размер содержимого UISwitch остается по умолчанию w: 51px h: 31px, несмотря на изменение преобразования вида. Вы должны попытаться подклассифицировать UISwitch и переопределить метод intrinsicContentSize - (CGSize), возвращая CGSizeMake (25.5f, 15.5f) –

ответ

0

У вас есть две возможные способы пойти здесь: либо подкласс UISwitch и попытаться применить все необходимые изменения в подклассе, или определить новый UIView, который включает в себя как подзаголовок модифицированного UISwitch. Подкласс может быть самым быстрым, но он сложнее и рискованнее, поскольку UISwitch не был предназначен для подклассов для такого рода модификаций.

Предположив вы идете маршрут подклассов, вот изменения, которые необходимо сделать:

  1. применить масштабирование преобразование к self, очевидно.

  2. переопределить alignmentRectForFrame:, поэтому он возвращает super.alignmentRectForFrame: плюс ваше масштабирующее преобразование.

  3. переопределение intrinsicContentSize, поэтому она возвращает super.intrinsicContentSize плюс ваше масштабное преобразование

В принципе, номер 1 должен выполнить фактическое визуальное преобразование. Но 2 и 3 необходимы, чтобы сообщить Auto Layout о размере нового представления, так как по умолчанию AL не знает об этих преобразованиях.

0

Преобразования из зрения происходят вокруг центра зрения, поэтому, когда вы звоните

view.transform = CGAffineTransformMakeScale(0.5, 0.5) 

Это имеет смысл, что она выглядит, как это в прошивке 8, причина того, что она хорошо выглядит в прошивке 7, вероятно, из-за ошибки в iOS 7.

Попытки изменить константу ведущего ограничения, как это:

self.switchLeadingConstraint.constant = -(self.mySwitch.bounds.size.width/4) 

Таким образом, вы можете компенсировать на офсайде, что у вас есть в прошивке 8.

Смежные вопросы