更改UINavigationBar中的UIBarButtonItem的宽度
我正在创build一个UIBarButtonItem并将其添加到我的导航栏,如下所示:
(void)viewDidLoad { ... // Add the refresh button to the navigation bar UIButton *refreshButton = [UIButton buttonWithType:UIButtonTypeCustom]; [refreshButton setFrame:CGRectMake(0,0,30,30)]; [refreshButton setImage:[UIImage imageNamed:@"G_refresh_icon.png"] forState:UIControlStateNormal]; [refreshButton addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *refreshBarButton = [[[UIBarButtonItem alloc] initWithCustomView:refreshButton] autorelease]; self.navigationItem.leftBarButtonItem = refreshBarButton; }
我运行时看起来是正确的,但是我可以通过点击导航栏从x = 0到大约100的任何位置来select栏button项目。如何将可选区域的宽度调整为30 px?
达伦
您可能会考虑的一种方法是通过调用initWithCustomView来创build一个UIBarButtonItem。 这是不理想的,因为你没有得到“select”状态,你必须合并你的边框背景(如果你想看看)与你的button图像,但是,你可以更直接地指定一个框架工具栏项目。 如果您使用的是标题而不是图片的文字,则可能仍然需要将背景图片添加为子视图。 无论如何,我现在有同样的问题,这个代码为我工作:
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"button-image.png"]]; imageView.frame = CGRectMake(0, 0, 43, 30); UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:imageView]; self.navigationItem.leftBarButtonItem = barButtonItem;
现在,这是我知道限制UIBarButtonItems添加到UINavigationController的navigationItem的自动resize的唯一方法。
[EDITED]
或者试试Maggie的解决scheme,比我的解决scheme更彻底 。
您可以通过从界面构build器中将图像拖放到栏button项并使用以下代码更改自定义视图的宽度来完成此操作:
CGRect frame = self.navigationItem.leftBarButtonItem.customView.frame; frame.size.width = 141; self.navigationItem.leftBarButtonItem.customView.frame = frame;
关键是要意识到你正在改变自定义视图的宽度,而不是UIBarButton
本身。
代码是:
CGRect resizedFrame = myBarButtonItem.customView.frame; resizedFrame.size.width = myNewWidth; myBarButtonItem.customView.frame = resizedFrame;
您还需要触发布局更改:
[myNavigationBar setNeedsLayout];
所有这一切都不用说,布局正在与自动resize和框架。 带有自动布局的导航栏的入侵没有取得成功。 使用UINavigationBar和UIBarButtonItem查看我的问题自动布局 。
抱歉只是意识到我的代码几乎和@oscartzombie一样。 不是故意的! 我将留下这个答案,因为我觉得值得添加布局和其他要点,除了解释没有参考接口布尔或图像具体。
下面的方法工作,看代码来改变button的宽度和高度,以及添加行动项目。
UIButton *imageButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 22, 22)]; [imageButton setBackgroundImage:[UIImage imageNamed:@"message_button"] forState:UIControlStateNormal]; [imageButton addTarget:self action:@selector(messageButtonTapped) forControlEvents:UIControlEventAllEvents]; UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:imageButton]; self.navigationItem.leftBarButtonItem = leftBarButtonItem;
注意:UIBarButtonItem的目标和操作不适用于图像视图