使用其他文本自定义UIBarButtonSystemItem

本文关键字:自定义 UIBarButtonSystemItem 文本 其他 | 更新日期: 2023-09-27 18:24:17

我想要一个在底部工具栏上有另一个文本的UIBarButonSystemItem(类似于UIBarButtonSystemItem.Cancel)。

这就是我现在所拥有的(代码在C#中,但这并不重要,因为你可以在Objective-C中提供你的解决方案):

UILabel markLabel = new UILabel (new RectangleF(0,0,150,30));
markLabel.Text = "Mark";
UIView containerView = new UIView (new RectangleF(0,0,150,30));
containerView.AddSubview (markLabel);
var markButton = new UIBarButtonItem (markLabel);

应该如何创建这样的按钮?使用UIButton(此处我失败)还是如上所述使用带有UILabelUIView?此外,我总是提供属性。如果要使用"自动布局",该怎么办?大小如何适应不断变化的内容大小(例如国际化)?间距元素如何?

编辑:

这现在适用于UIButton:

var temp = UIButton.FromType (UIButtonType.System);
temp.SetTitle ("Mark", UIControlState.Normal);
temp.SizeToFit ();
var markButton = new UIBarButtonItem (temp);

但颜色和字体大小必须进行调整。仍然存在一些问题:如果文本变宽,即使使用AdjustsFontSizeToFitWidth也不会缩小字体大小。此外,定位也有所不同。例如,取消按钮与屏幕边框的间距与我的按钮不同。

使用其他文本自定义UIBarButtonSystemItem

使用UIButton可以制作一个按钮,如下所示:

UIButton button = new UIButton (new RectangleF(5, 5, 30, 30));
button.SetTitle ("Hello, world", UIControlState.Normal);

在本例中,框架属性是硬编码的。如果您想使大小自动调整,您应该向可以从任何其他类(如AppDelegate)调用的类添加属性。

public static float ScreenWidth { get; set; }
public static float ScreenHeight { get; set; }

然后,在第一个视图的ViewWillAppear中添加一个对新属性的调用,该属性将出现在屏幕上(然后更新帧大小),并在ViewDidRotate方法中添加所有类中的新属性,在这些类中,您希望控件可以自动调整(并在之后更新帧尺寸):

public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation)
{
    base.DidRotate (fromInterfaceOrientation);
    AppDelegate.ScreenWidth = this.View.Bounds.Width;
    AppDelegate.ScreenHeight = this.View.Bounds.Height;
    UpdateFrameSize ();
}

字体大小可以使用button.Font属性进行更改:

button.Font = UIFont.SystemFontOfSize (12);

遗憾的是,没有将文本包装在按钮中的选项。如果您希望显示和包装文本以适应屏幕,则应在下一个按钮的上方或下方使用UILabel,以显示您想要显示的文本。可以使用UILabel的UILabel.LinesUILabel.LineBreakMode属性。

    lblClient.Lines = 5;
    lblClient.LineBreakMode = UILineBreakMode.WordWrap;

尝试一下这些属性和方法,看看什么最适合你的项目。如果有什么不清楚的地方,或者你希望对你的例子中的问题有更多的解释,请毫不犹豫地问。祝你好运