导航栏中的自定义文本

Posted

技术标签:

【中文标题】导航栏中的自定义文本【英文标题】:Custom text in navigation bar 【发布时间】:2015-09-07 08:08:42 【问题描述】:

我想在UINavigationBarleftBarButtonItem/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检查标签框是否必要 我看到的唯一构造函数是我在问题中使用的构造函数(您需要更多参数)。首先,我尝试使用导致崩溃的自动布局,因为他不知道父级。现在我尝试设置框架并显示标签!同样的事情如何与自动布局一起工作?我必须在哪里添加约束? UINavigationControllerView? 如果您直接在视图中使用标签,那么您可以处理自动布局,但 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# 世界,如果 btntestLabel,这与 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;

【讨论】:

以上是关于导航栏中的自定义文本的主要内容,如果未能解决你的问题,请参考以下文章

导航栏中的自定义字体截断使用分号而不是省略号

用两行更改此自定义导航栏中的文本颜色?

Gatsbyjs 中的自定义导航栏

导航栏中的 Swift 自定义后退按钮

IOS - 垂直对齐导航栏中的后退按钮

iOS 11 在导航栏中自定义搜索栏