我有一个应用程序,我正在更新为自动布局和大小类,并且在按钮上出现一些带有标签的奇怪行为。UIButton上的标签与自动布局排列不正确
该按钮应该是一个圆形,并在中心有一个标签。我正在实现我自己的子类,所以我可以重用它。
这里的故事板:
和延伸UIButton的类代码:预期
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self setBackgroundImage:[UIImage imageNamed:@"selected-green"] forState:UIControlStateHighlighted ];
self.layer.borderColor = [UIColor tlbWhiteColor].CGColor;
self.layer.borderWidth = 10;
}
return self;
}
-(void) layoutSubviews {
self.layer.cornerRadius = self.frame.size.width/2;
}
与此出现,但没有标签。在调试时,我看到标签的框架有0高度和宽度。所以我延长layoutSubviews:
-(void) layoutSubviews {
self.layer.cornerRadius = self.frame.size.width/2;
if (self.titleLabel.frame.size.width == 0) {
[self.titleLabel sizeToFit];
[self setNeedsLayout];
[self layoutIfNeeded];
}
}
标签然后出现,但它是在错误的地方:
唯一的额外信息,我可以提供的是,在显示的按钮有怪异的高度,宽度限制加入:
的titleInsets都为0。
帮助极大地赞赏。
感谢您的指针。 go标签不是标签,它是按钮的标题([self.titleLabel sizeToFit];等等)。我会仔细检查我没有其他代码覆盖它。 – Lewis42
此外,角布局代码在布局子视图中的原因是,在此之前按钮尚未布置,因此它不会形成圆圈。如果你可以建议这个非hacky的地方说它会很好。我会做其他检查 – Lewis42
没有额外的代码影响布局。该按钮扩展了UIButton。视图控制器没有影响布局的代码,也不是父代。唯一改变的是整个视图的背景颜色,并添加一个按钮导航栏发生在viewDidLoad – Lewis42