2017-10-26 7 views
0

下記のテキストを持つ中央のボタンは私がUIButtonのアイコン下の中央のテキストのためにこのクラスを使用しています:それは正常に動作していますStackView - 画像

@IBDesignable 
class TopIconButton: UIButton { 

    override func layoutSubviews() { 
     super.layoutSubviews() 

     let kTextTopPadding:CGFloat = 3.0; 

     var titleLabelFrame = self.titleLabel!.frame; 


     let labelSize = titleLabel!.sizeThatFits(CGSize(width: self.contentRect(forBounds: self.bounds).width, height: CGFloat.greatestFiniteMagnitude)) 

     var imageFrame = self.imageView!.frame; 

     let fitBoxSize = CGSize(width: max(imageFrame.size.width, labelSize.width), height: labelSize.height + kTextTopPadding + imageFrame.size.height) 

     let fitBoxRect = self.bounds.insetBy(dx: (self.bounds.size.width - fitBoxSize.width)/2, dy: (self.bounds.size.height - fitBoxSize.height)/2) 

     imageFrame.origin.y = fitBoxRect.origin.y 
     imageFrame.origin.x = fitBoxRect.midX - (imageFrame.size.width/2) 
     self.imageView!.frame = imageFrame; 

     // Adjust the label size to fit the text, and move it below the image 

     titleLabelFrame.size.width = labelSize.width 
     titleLabelFrame.size.height = labelSize.height 
     titleLabelFrame.origin.x = (self.frame.size.width/2) - (labelSize.width/2) 
     titleLabelFrame.origin.y = fitBoxRect.origin.y + imageFrame.size.height + kTextTopPadding 
     self.titleLabel!.frame = titleLabelFrame 
     self.titleLabel!.textAlignment = .center 
    } 
} 

。私の問題は、UIStackViewで使用を開始したときです。 UITabBarと似たようなものを作成しているので、5つのボタンが隣にあります。私は真ん中のボタンを画面の真ん中に置いておきたいですが、それはいつも数ピクセルです。私はUIStackViewの制約をチェックしても問題ありません。私はすべてのボタンexect中1を削除し、それは正確に真ん中にあります。 UIStackView(塗りつぶし、中央揃え、等しく塗りつぶしなど)のオプションを試しました。何も役立ちません。誰にも分かりますか?各ボタンには異なるアイコンがあり(サイズが異なる)、テキストも異なっています(フリー、プレミアムなど - 時にはアイコンが小さくなることもあります)。

私StackViewの例(真ん中です赤い線が表示されます):

Example of my StackView

答えて

0

画像サイズはここでは関係になるだろう。 5枚の画像をすべて同じサイズにすると、この問題はもう発生しません。それを実行した後に「等しく塗りつぶす」を使用すると、結果が得られます