IOS Высота UIButton (DLRadioButton) не зависит от размера текста надписи - PullRequest
0 голосов
/ 06 апреля 2020

У меня 3 переключателя DLRadioButton (наследник UIButton). Они расположены одна под другой.

enter image description here

Я хочу, чтобы высота кнопок увеличивалась при увеличении высоты надписи заголовка. Я установил число строк = 0:

    btn1.titleLabel?.numberOfLines = 0
    btn2.titleLabel?.numberOfLines = 0
    btn3.titleLabel?.numberOfLines = 0

, чтобы получить столько строк, сколько мне нужно. Но работает только до 2-х рядов. Если размер текста большой, высота кнопки не увеличивается, а метки перекрываются.

enter image description here

Как я могу это исправить?

1 Ответ

1 голос
/ 08 апреля 2020

Вам необходимо отредактировать источник для класса DLRadioButton.

Вот пример быстрого изменения.

Примечание: это изменение будет работать только для положения левой иконки с многострочными метками кнопок. Положение правой кнопки по-прежнему будет работать с однострочными кнопками.

В DLRadioButton.m в источнике библиотеки добавьте этот метод:

- (CGSize)intrinsicContentSize {
    [self.titleLabel sizeToFit];
    CGSize sz = self.titleLabel.bounds.size;
    sz.height += self.titleEdgeInsets.top + self.titleEdgeInsets.bottom;
    sz.width += self.icon.size.width + self.titleEdgeInsets.left + self.titleEdgeInsets.right + self.marginWidth;
    return sz;
}

Затем вы можете расположить свои кнопки следующим образом (или генерировать их из кода, не имеет значения):

enter image description here

и пример кода контроллера Swift View:

class MultilineViewController: UIViewController {

    @IBOutlet var qTitle: UILabel!
    @IBOutlet var button1: DLRadioButton!
    @IBOutlet var button2: DLRadioButton!
    @IBOutlet var button3: DLRadioButton!

    override func viewDidLoad() {
        super.viewDidLoad()

        for btn in [button1, button2, button3] {
            btn?.titleLabel?.lineBreakMode = .byWordWrapping
        }
    }

}

Для этого результата (я только что добавил еще один V C на панель вкладок примера приложения):

enter image description here

«Круг с переключателем» будет расположен вертикально в центре. Если вы хотите, чтобы он был выровнен по верхней строке текста, это потребовало бы некоторого дополнительного редактирования.

Если вы не планируете использовать другие функции этой библиотеки DLRadioButton (такие как изображения значков, позиционирование по правому значку, выбор нескольких групп флажков и т. д. c), вы можете захотеть взглянуть на другие реализации (их много) или написать свою собственную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...