今天在练习写微博的时候遇到一个问题:首页的导航栏titleView是自定义的UIButton,要让文字显示在图片的前面,这里重写了layoutSubViews()方法,也设置了sizeToFit();但是结果如下:
这是跟着网上的视频一步步做的结果
想了一下:问题肯定是出在了layoutSubViews();
/// 重写布局方法 让图片在文字的后面
override func layoutSubviews() {
super.layoutSubviews()
// 判断是否有图标和标题
guard let imageView = imageView, let titleLabel = titleLabel else {
return
}
// 对应移动
titleLabel.frame = titleLabel.frame.offsetBy(dx: -imageView.bounds.width, dy: 0)
imageView.frame = imageView.frame.offsetBy(dx: titleLabel.bounds.width, dy: 0)
}
可以看到titleLabel.frame和imageView.frame分别以对方为参照移动。如图所示移动的量明显大了很多啊。所以试着分别调用了sizeToFit();
// 设置图片和文字的尺寸
titleLabel?.sizeToFit()
imageView?.sizeToFit()
// 设置button的sizeToFit 否则它不知道要如何显示
sizeToFit()
结果完美了!