2014-09-24 67 views
0

我想與其他文本的UIBarButonSystemItem(類似於例如UIBarButtonSystemItem.Cancel)我的底部工具欄上。定製UIBarButtonSystemItem與其他文本

這是我現在有(代碼是在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?此外,我始終以提供框架性能。如果您想使用自動佈局,該怎麼辦?尺寸如何適應不斷變化的內容尺寸(例如國際化)以及間距元素呢?

編輯:

這現在與UIButton

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

但顏色和字體大小必須適應。有些問題仍然存在:如果文本變得更寬,它不會縮小字體大小甚至AdjustsFontSizeToFitWidth使用。定位也不同。例如。取消按鈕與屏幕邊框的間距不同於我的按鈕。

回答

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; 

用這些屬性和方法試驗一下,看看什麼最適合你的項目。如果事情不清楚,或者希望對示例中的問題進行更多解釋,請不要猶豫。祝你好運!

+0

感謝Magicbjørn爲您解答。我得到它設法使用我在我的編輯發佈的解決方案。 'AdjustsFontSizeToFitWidth'和'SizeToFit'不能一起工作。你只能使用一個。隨着間距,我採取了負面的間隔。但以這種方式,我不必跟蹤屏幕尺寸。但有第二備份選項很不錯。 – testing 2015-01-07 08:06:14