2016-10-16 6 views
0

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

Идея заключается в том, что я буду использовать ее для динамического определения высоты некоторых кнопок внутри настраиваемого элемента управления. Я установил высоту Placeholder равным 44 в инспекторе размера Xcode.

enter image description here

Отработка Start Developing iOS Apps (Swift) учебника Apple, я пытаюсь получить доступ к frame.size.height, и это дает значение 1000 в то время как учебник, кажется, предполагает, что это должно быть 44.

class RatingControl: UIView { 
    ... 
    override public var intrinsicContentSize: CGSize { 
     let buttonSize = Int(frame.size.height) 
     print(buttonSize) // prints 1000 
     let width = (buttonSize * starCount) + (spacing * (starCount - 1)) 
     return CGSize(width: width, height: buttonSize)   
    } 
    ... 

ответ

2

Вам не следует обращаться к frame внутри intrinsicContentSize. intrinsicContentSize должен вернуть размер, который идеально соответствует содержимому представления, независимо от его текущего кадра.

В вашем случае, я думаю, вы можете просто использовать 44 для своего buttonSize.

+0

Любопытно, что автор Apple так обратился к «фрейму» в своем учебнике. Установка размера до 44 работает. Я просто поеду с ним. – ThisClark

+0

Да, это своего рода хак, который раньше работал до iOS 10 ... –

1

Заполнителя присущего размера как раз это, placeholder, так что интерпретатор IB имеет некоторое значение для работы и может компоновать остальную часть сцены. Но в вашем intrinsicContentSize геттере вы реализуете реальный размер, который будет использоваться во время выполнения с помощью механизма AutoLayout. Поскольку вы возвращаете 1000 в качестве внутренней высоты содержимого, это то, что вы увидите во время выполнения.

+0

Откуда берется 1000, и как я могу получить 44, поскольку он установлен на свойстве высоты пользовательского элемента управления? Я хотел бы сделать что-то вроде 'let buttonSize =/* где бы то ни было 44 * /' – ThisClark

+0

В вашей реализации 'intrinsicContentSize' вы возвращаете 1000. Вы так говорите в комментарии' // prints 1000'. –

+1

Автомакет может использовать любое значение для начального размера представления. Он использовался для использования значений, исходящих от IB (построитель интерфейсов), но начиная с iOS 10 все кажется 1000. –

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