我想在我的底部工具栏上添加另一个文字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
(我在这里失败)或UIView
与UILabel
?另外,我总是提供 frame 属性。如果你想使用自动布局怎么办?如何调整大小以适应不断变化的内容大小(例如国际化)以及间距元素如何?
修改
现在可以使用UIButton
:
var temp = UIButton.FromType (UIButtonType.System);
temp.SetTitle ("Mark", UIControlState.Normal);
temp.SizeToFit ();
var markButton = new UIBarButtonItem (temp);
但是必须调整颜色和字体大小。仍然存在一些问题:如果文本变宽,即使使用AdjustsFontSizeToFitWidth
,也不会缩小字体大小。定位也不同。例如。取消按钮与屏幕边框的间距与我的按钮的间距不同。
答案 0 :(得分:1)
可以使用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;
使用这些属性和方法进行一些实验,看看什么最适合您的项目。如果某些事情不明确,或者您希望对您的示例中的问题有更多解释,请不要犹豫。祝你好运!