【问题标题】:Spacing between custom type right bar button items自定义类型右栏按钮项之间的间距
【发布时间】:2015-06-27 15:34:29
【问题描述】:

我在导航栏中添加了四个右栏按钮项。

UIButton *replybutton =  [UIButton buttonWithType:UIButtonTypeCustom];
    [replybutton setImage:[UIImage imageNamed:@"reply.png"] forState:UIControlStateNormal];
    [replybutton addTarget:self action:@selector(replyAction:)forControlEvents:UIControlEventTouchUpInside];
    [replybutton setFrame:CGRectMake(0, 0, 30, 28)];
    UIBarButtonItem *replyBarButton = [[UIBarButtonItem alloc] initWithCustomView:replybutton];
// there are 3 more buttons like this..

 self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects:replyBarButton, replyAllBarButton, forwardBarButton, deleteBarButton, nil];

我想在这四个条形按钮自定义类型项目之间留出一些额外的间距。我试过 imageInsets,

replyBarButton.imageInsets = UIEdgeInsetsMake(0.0, 40.0, 0.0, 0.0);

但它没有给出间距。有人可以告诉我,我怎样才能在四个右栏自定义类型按钮项之间提供额外的间距?

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您可以使用UIBarButtonSystemItemFlexibleSpaceUIBarButtonSystemItemFixedSpace

    这是一个例子:

    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
    [button1 setImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal];
    [button1 addTarget:self action:@selector(replyAction:) forControlEvents:UIControlEventTouchUpInside];
    [button1 setFrame:CGRectMake(0, 0, 30, 28)];
    
    // other buttons are created the same way
    
    UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithCustomView:button1];
    UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithCustomView:button2];
    UIBarButtonItem *item3 = [[UIBarButtonItem alloc] initWithCustomView:button3];
    UIBarButtonItem *item4 = [[UIBarButtonItem alloc] initWithCustomView:button4];
    
    UIBarButtonItem *space1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *space2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    UIBarButtonItem *space3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    
    self.navigationItem.rightBarButtonItems = @[item1, space1, item2, space2, item3, space3, item4];
    

    在此示例中,您将在每个项目之间添加灵活的空格。这将自动均匀地排列您的物品。

    如果你愿意,你也可以定义空间:

    UIBarButtonItem *fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
    fixedSpace.width = 40.0 // adjust this
    

    【讨论】:

    • 它们是“自定义类型栏按钮项”
    • 在这种情况下没关系,但我已经更新了我的答案以使用自定义项目。