Xamarin iOS отображает изображение и текст в кнопке UIB - PullRequest
0 голосов
/ 03 января 2019

Я относительно новичок в iOS, так что будьте спокойны! В моем приложении мне нужно иметь кнопку, которая содержит изображение заголовка. Изображение должно идти над заголовком. Изображение определяется динамически из строки base64. Моя проблема в том, что я не могу понять, как отобразить заголовок и изображение в кнопке одновременно. Я могу отображать их по отдельности, но не вместе. Я попытался следовать подходу по ссылке ниже, но я не смог заставить его работать: Кнопка отображения с текстом и изображением в Xamarin IOS Вот как должна выглядеть кнопка:

enter image description here

В Xamarin iOS я использую приведенный ниже код, чтобы установить изображение и выложить элементы управления на кнопке:

DeviceMenuItems m_menuItem = HHMenuContainer.Instance.GetMenuItems().DeviceMenuItems.SingleOrDefault(l => l.LineNo.ToString() == m_lineNo);

                if (m_menuItem != null && m_menuItem.Base64Picture != null)
                {
                    byte[] bytes = Convert.FromBase64String(m_menuItem.Base64Picture);

                    NSData data = NSData.FromArray(bytes);
                    UIImage uiimage = UIImage.LoadFromData(data);
                    //this line is not relevant to the problem
                    uiimage = ChangeImageBackground(uiimage);

                    if (uiimage != null)
                    {
                        //m_control is the UIButton
                        //commenting this out removes the image and shows the text
                         m_control.SetImage(uiimage, UIControlState.Normal);

                        float titleLabelHeight = (float)(m_control.TitleLabel.Frame.Size.Height + 10);

                        m_control.ImageEdgeInsets = new UIEdgeInsets(-(titleLabelHeight), 0, titleLabelHeight, 0 );

                        float imageHeight = (float)(m_control.ImageView.Frame.Size.Height * 0.5);

                        imageHeight -= titleLabelHeight;

                        m_control.TitleEdgeInsets = new UIEdgeInsets(imageHeight, 0, -(imageHeight), 0);
                    }
                }

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

enter image description here

Если я прокомментирую строку «SetImage», я получу следующую кнопку:

enter image description here

У кого-нибудь есть идеи, почему вышеуказанный подход не работает?

1 Ответ

0 голосов
/ 04 января 2019

Из общей ссылки показывается левый заголовок и правое изображение. Если вам нужен макет вверх или вниз, вы можете попробовать это:

button.TitleEdgeInsets = new UIEdgeInsets(0, -button.ImageView.Frame.Size.Width,  -button.ImageView.Frame.Size.Height - 5,0);
button.ImageEdgeInsets = new UIEdgeInsets( -button.TitleLabel.Frame.Size.Height - 5, 0 , 0, -button.TitleLabel.Frame.Size.Width);

Примечание : если задан кадр кнопки, а ширина кнопки недостаточна для одновременного отображения размера изображения и текста, то размер titleLabel выдает ошибку. Поэтому, если вам нужно установить фрейм, рекомендуется установить ширину кнопки равной frame.size.width * 2, а затем установить фрейм после того, как все titleEdgeInsets и imageEdgeInsets установлены.

...