导航栏中的自定义文本
Posted
技术标签:
【中文标题】导航栏中的自定义文本【英文标题】:Custom text in navigation bar 【发布时间】:2015-09-07 08:08:42 【问题描述】:我想在UINavigationBar
中leftBarButtonItem
/rightBarButtonItem
的位置上设置一个文本。您必须使用UIBarButtonItem
,但您可以将不同的UIView
对象放入其中。首先,我尝试使用标签,但这不起作用。代码在 C# 中,但你应该明白:
UILabel textLabel = new UILabel();
textLabel.Text = "My custom text which should be displayed in navigation bar";
UIBarButtonItem customBarButtonItem = new UIBarButtonItem (textLabel);
NavigationItem.RightBarButtonItem = customBarButtonItem;
标签未显示。如果我使用按钮,它似乎可以工作(除了必须调整样式)。
UIBarButtonItem customBarButtonItem = new UIBarButtonItem ("My custom text which should be displayed in navigation bar", UIBarButtonItemStyle.Plain,null);
NavigationItem.RightBarButtonItem = customBarButtonItem;
为什么不能使用UILabel
?在UIBarButtonItem
中显示像标题这样的文本的正确方法是什么?
编辑:
我目前的发现是:
要么设置UIBarButtonItem
的标题,要么设置UILabel
的框架(感谢Anbu.Karthik)。
【问题讨论】:
您最好展示真实代码并遵守命名约定。这是相当猜测的工作。 @HermannKlecker:我编辑了我的问题以添加一些更有意义的占位符。该代码是我以后要使用的。只有内容会改变。 【参考方案1】:改变
UILabel testLabel = new UILabel();
testLabel.frame=CGRectMake(0, 0, 200, 21);
testLabel.Text = "yuhu";
UIBarButtonItem test = new UIBarButtonItem (testLabel.text);
【讨论】:
else检查标签框是否必要 我看到的唯一构造函数是我在问题中使用的构造函数(您需要更多参数)。首先,我尝试使用导致崩溃的自动布局,因为他不知道父级。现在我尝试设置框架并显示标签!同样的事情如何与自动布局一起工作?我必须在哪里添加约束?UINavigationController
的 View
?
如果您直接在视图中使用标签,那么您可以处理自动布局,但 UIBarbutton 不会在任何链层次结构中,所以在这里只需将标签文本移动/分配给 bar按钮文本,所以标签框适合这里
如果我理解正确,我可以安全地设置框架并忘记这种情况下的自动布局(因为它不在任何视图层次结构中)?
这里如果你尝试使用自动布局,你的应用肯定会崩溃,原因不是 UIButton , UIButton 有链层次结构,但 UIBarbutton 不包含【参考方案2】:
更改这行代码UIBarButtonItem test = new UIBarButtonItem (testLabel);
UILabel testLabel = new UILabel();
testLabel.Text = "yuhu";
testLabel.frame=CGRectMake(x, y, width, height);
//change this line
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:testLabel];
NavigationItem.RightBarButtonItem = test;
【讨论】:
如果我将它翻译成 C# 世界,如果 btn 是 testLabel,这与UIBarButtonItem test = new UIBarButtonItem (testLabel);
完全相同。还是你的意思是UIButton
?
我只想显示一个文本。第一个想法是使用UILabel
,但这对我不起作用。
但是标签不会给条形按钮任何意义,因为它不会有任何动作。你打算添加到 uilabel 的点击手势
它应该只显示一个文本。此处无需执行任何操作。
我不瘦,所以约束会起作用,你可能必须基于帧【参考方案3】:
使用这个
UIImage *buttonImage = [UIImage imageNamed:@"back.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;
【讨论】:
以上是关于导航栏中的自定义文本的主要内容,如果未能解决你的问题,请参考以下文章