UIControl -contentHor HorizontalAlignment: как использовать в подклассе - PullRequest
0 голосов
/ 26 июля 2010

UIControl имеет два свойства, которые задокументированы для влияния на макет содержимого в представлении элемента управления:

contentHorizontAlignment

The horizontal alignment of content (text or image) within the receiver.

controlVerticalAlignment

The vertical alignment of content (text or image) within the receiver.

У меня есть подкласс UIControl, который управляет набором из пяти подпредставлений;каждое подпредставление является пользовательским подклассом UIView (т. е. не UILabel или UIImageView).

Я бы хотел получить UIControl, управляющий макетом моих пользовательских подпредставлений с использованием свойств contentHorizontalAlignment и contentVerticalAlignment.

Из моих экспериментов не видно, что UIControl фактически учитывает любое из этих значений свойств при создании макета подпредставления, по крайней мере, когда подпредставления не являются метками или изображениями.Я не уверен на 100%, что мой подкласс правильно реализован.

У меня три вопроса:

  1. Реализует ли UIControl какое-либо поведение макета вокруг этих свойств?
    • Это только для подпредставлений, которые являются UILabel и UIImageView?
  2. Должен ли я обеспечить реализацию макета подпредставления в моем подклассе UIControl?
  3. Эти свойства присутствуют в базовом классе UIControl в основном для обеспечения вызывающего абонента согласованным API для управления контентом?

Я ожидаю, что UIControl обеспечит какое-то поведение макета базового уровня, учитывая наличиеcontentHorizontalAlignment и contentVerticalAlignment свойства.

Я вне базы?Я не возражаю против реализации моего собственного поведения макета.Я просто не хочу сражаться с фреймворком, если UIControl уже обеспечивает какое-то поведение макета, которое я должен использовать.

Спасибо,

Bill

1 Ответ

4 голосов
/ 29 июля 2010

Просто чтобы продолжить это ...

UIControl просто предоставляет эти свойства в качестве согласованного API для подклассов. Базовый класс ничего с ними не делает.

В своем подклассе UIControl переопределите метод -layoutSubviews и используйте свойства для управления логикой макета.

, например

switch (self.contentHorizontalAlignment) {
    case UIControlContentHorizontalAlignmentCenter:
    // layout logic for centering
    break; 
}
...