自定义UIBarButtonSystemItem与另一个文本

时间:2014-09-24 13:19:06

标签: c# ios uinavigationbar uitoolbar

我想在我的底部工具栏上添加另一个文字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(我在这里失败)或UIViewUILabel?另外,我总是提供 frame 属性。如果你想使用自动布局怎么办?如何调整大小以适应不断变化的内容大小(例如国际化)以及间距元素如何?

修改

现在可以使用UIButton

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

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

1 个答案:

答案 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.LinesUILabel.LineBreakMode属性。

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

使用这些属性和方法进行一些实验,看看什么最适合您的项目。如果某些事情不明确,或者您希望对您的示例中的问题有更多解释,请不要犹豫。祝你好运!