在UIButton中为不同的文本大小设置图像对齐

时间:2015-11-20 16:19:02

标签: iphone swift uibutton interface-builder ios9

我的导航栏中有一个按钮。此按钮居中对齐。当用户点击它时,模式视图的启动方式与Apple的音乐 iOS应用中的部分相同。

我想使用这个向下箭头选择器图像。我按照this StackOverflow question将图像配置为右侧(标题 - 图像)。

enter image description here

enter image description here

当用户从具有不同文本大小的模态视图中选择另一个选项时,会出现问题:应用更新按钮文本,在某些情况下会覆盖图像。

enter image description here

即使文本大小发生变化,是否可以在所有情况下使此图像正确对齐? 感谢

更新:我在Swift上编码。 Swift代码片段将不胜感激。

2 个答案:

答案 0 :(得分:0)

titleView的{​​{1}}属性不会根据其内容调整自身大小。如果您需要改变尺寸,您必须自己动手。

您最好的选择是使用自定义视图,当其显示的内容发生更改时,更改其边界需要不同的大小。

我能想到的另一个选择是在文本改变时手动调整左边的图像和按钮的边界。这需要您计算文本的宽度以更新左侧插入的图像和边界。

答案 1 :(得分:0)

用于创建基于子视图增长的自定义视图,您可以执行以下操作:

UIView *superview = self.view;

UIView *containerView = [UIView new];
[containerView setBackgroundColor:[UIColor blackColor]];
[containerView setTranslatesAutoresizingMaskIntoConstraints:NO];
[superview addSubview:containerView];
//this will be containing my button and my label

UILabel *mylabel = [[UILabel alloc]init];
[mylabel setBackgroundColor:[UIColor redColor]];
[mylabel setTranslatesAutoresizingMaskIntoConstraints:NO];
mylabel.text = @"MyLabel";

UIButton *mybutton = [UIButton
                      buttonWithType:UIButtonTypeRoundedRect];
[mybutton setTitle:@"My Button ye ye yey yeyeyye yeyey"
          forState:UIControlStateNormal];
[mybutton setTranslatesAutoresizingMaskIntoConstraints:NO];
[mybutton setBackgroundColor:[UIColor greenColor]];

[containerView addSubview:mylabel];
[containerView addSubview:mybutton];


NSDictionary * views = NSDictionaryOfVariableBindings(mybutton,mylabel, containerView);
//create pin of fixed 2 pixes between UIButton and UILabel.Done
NSArray * horizontalConstraintsforbuttons = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-1-[mybutton(<=400)]-2-[mylabel(60)]-1-|" options:0 metrics:nil views:views];
NSArray * heightConstraintforbutton = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mybutton(==60)]" options:0 metrics:nil views:views];
NSArray * heightConstraintforLabel = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[mylabel(==60)]" options:0 metrics:nil views:views];

[containerView addConstraints:horizontalConstraintsforbuttons];
[containerView addConstraints:heightConstraintforbutton];
[containerView addConstraints:heightConstraintforLabel];


//container view specific constraints

NSArray *heightConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[containerView(==60)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(containerView)];

[superview addConstraints:heightConstraint];


[superview addConstraint:[NSLayoutConstraint constraintWithItem:containerView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeCenterX multiplier:1.0f constant:0.0]];

[superview addConstraint:[NSLayoutConstraint constraintWithItem:containerView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:superview attribute:NSLayoutAttributeCenterY multiplier:1.0f constant:0.0]];

<强>输出

a customview which grows based on UIButton string length

您可以使用UIImageView代替UILabel。

我无法弄清楚如何在导航项目tite视图中添加此容器视图。

如果添加

,这就是最终输出
[self.navigationItem.titleView addSubview:containerView]; 

在最后一行。 tite view not centered

可能是@clever错误可以解雇你