使用其他文本自定义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
(此处我失败)还是如上所述使用带有UILabel
的UIView
?此外,我总是提供帧属性。如果要使用"自动布局",该怎么办?大小如何适应不断变化的内容大小(例如国际化)?间距元素如何?
编辑:
这现在适用于UIButton
:
var temp = UIButton.FromType (UIButtonType.System);
temp.SetTitle ("Mark", UIControlState.Normal);
temp.SizeToFit ();
var markButton = new UIBarButtonItem (temp);
但颜色和字体大小必须进行调整。仍然存在一些问题:如果文本变宽,即使使用AdjustsFontSizeToFitWidth
也不会缩小字体大小。此外,定位也有所不同。例如,取消按钮与屏幕边框的间距与我的按钮不同。
使用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.Lines
和UILabel.LineBreakMode
属性。
lblClient.Lines = 5;
lblClient.LineBreakMode = UILineBreakMode.WordWrap;
尝试一下这些属性和方法,看看什么最适合你的项目。如果有什么不清楚的地方,或者你希望对你的例子中的问题有更多的解释,请毫不犹豫地问。祝你好运