Xamarin iOS在UIButton中显示图像和文本

时间:2019-01-03 09:23:58

标签: ios xamarin.ios uibutton

我对iOS来说还比较陌生,所以请放轻松!在我的应用程序中,我需要有一个包含图片和标题的按钮。图片必须位于标题上方。该图像是从base64字符串动态定义的。 我的问题是我无法确定如何在按钮中同时显示标题和图像。我可以单独显示它们,但不能一起显示。我尝试按照以下链接中的方法进行操作,但无法使其正常工作: Display Button With Text & Image In 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 :(得分:0)

从共享链接显示左标题和右图像。如果需要上下布局,可以尝试以下操作:

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之后设置框架。