正在做的电商类app其中的商品规格选项界面模仿的淘宝界面及功能,其中一个需求就是把服务器返回的规格逐个显示出来,并添加单选效果。先说根据服务器数据规格显示问题,类似标签,当所给的数据较多时,单个按钮长度依规格字符长短而定,一屏铺开能显示几个十几个,宽度不够的改行显示,我数学不好,这其中涉及到的数学计算确实废了我不少脑细胞,网上各类demo繁简不一,理清了其中的逻辑改写了一个Swift版的:
var butX:CGFloat = 15.0
var butY = skuStyleLabel.frame.maxY+10;
for index in 0 ..< btnCount! {
//宽度自适应
let fontDict = [NSFontAttributeName: UIFont .systemFont(ofSize: 15.0)]
let frame_W = NSString(string: widthArray[index]).size(attributes: fontDict)
if butX+frame_W.width+15.0>kWidth-15.0 {
butX = 15.0
butY += 55.0
}
let skuBtn = UIButton(frame: CGRect(x: butX, y: butY, width: frame_W.width+15, height: 35))
skuBtn.setTitle(widthArray[index], for: .normal)
skuBtn.titleLabel?.font = UIFont.systemFont(ofSize: 15.0)
skuBtn.setTitleColor(UIColor.yl_colorWithHex(0x343434), for: .normal)
skuBtn.setTitleColor(UIColor.yl_colorWithHex(0xb4282d), for: .selected)
skuBtn.layer.borderWidth = 1.0
skuBtn.layer.borderColor = UIColor.yl_colorWithHex(0x979797).cgColor
skuBtn.layer.cornerRadius = 5
skuBtn.tag = index+300
skuBtn.addTarget(self, action: #selector(GoodsSkuCell.selectSku), for: .touchUpInside)
self.addSubview(skuBtn)
butX = skuBtn.frame.maxX + 15
}