2017-09-29 10 views
0

私はカルーセルのようなアニメーションで回転されたカードを示すコレクションビューを実装しました。私の問題は、カード自体がスワイプされたときに正しくサイズ変更されますが、フォントは同じサイズのままであるか、間違ってサイズが変更されることです。具体的には、答え(一番下の5つのラベル)はスタックビューにあります。私が試した私は、コレクションビューで動的フォントのサイズを変更

もの:

  • 自動レイアウト
  • 自動圧縮
  • adjustsFontSizeToFitWidth
  • 私はラベルを色私はいくつかのスクリーンショット以下に添付異なる制約の任意の数の

、より良い視認性。

screenshots of my page view controller

+0

このカードのようなページビューコントローラーを表示するためにどのような方法/ライブラリ/フレームワークを使用していますか? – the4kman

+0

標準のコレクションビューをカスタムレイアウトで使用して、カードのページングを有効にしました – lukelle

+0

ビューをどのように拡大していますか?スケール変換を使用していない場合は、それを調べる価値があります。 – DonMag

答えて

-1

ビューのサイズとそれにそれのサブビュー/ボタン/ラベルの/ etc規模のすべてを持って変更するには -ラベルのフォントを含むを、あなたはスケーリングのためCGAffineTransformを使用したほうが良いです。

ここは簡単な例です。プレイグラウンドページに貼り付けて、効果を確認することができます。

import UIKit 
import PlaygroundSupport 

class TestViewController : UIViewController { 

    let theStackView: UIStackView = { 
     let sv = UIStackView() 
     sv.translatesAutoresizingMaskIntoConstraints = false 
     sv.axis = .vertical 
     sv.distribution = .equalCentering 
     sv.alignment = .center 
     return sv 
    }() 

    let theContainerView: UIView = { 
     let v = UIView() 
     v.translatesAutoresizingMaskIntoConstraints = false 
     v.backgroundColor = .green 
     return v 
    }() 

    let btn: UIButton = { 
     let b = UIButton() 
     b.setTitle("Tap to Scale", for: .normal) 
     b.backgroundColor = .red 
     b.translatesAutoresizingMaskIntoConstraints = false 
     return b 
    }() 

    // on button tap, scale the Container view by 50% both ways 
    // note that Container view's subviews also scale 
    func btnTapped(_ sender: Any) { 
     theContainerView.transform = CGAffineTransform(scaleX: 0.5, y: 0.5) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // add the button to self.view 
     self.view.addSubview(btn) 

     // button position 
     btn.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true 
     btn.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 20.0).isActive = true 

     // add a target for the button tap 
     btn.addTarget(self, action: #selector(btnTapped(_:)), for: .touchUpInside) 

     // add our "Container" view 
     view.addSubview(theContainerView) 

     // add our Stack view to the Container view 
     theContainerView.addSubview(theStackView) 

     // add 5 labels to the Stack view 
     for i in 1...5 { 

      let label = UILabel() 
      label.font = UIFont.systemFont(ofSize: 20.0) 
      label.text = "This is Label \(i)" 
      label.backgroundColor = .cyan 
      label.translatesAutoresizingMaskIntoConstraints = false 

      theStackView.addArrangedSubview(label) 

     } 

     // pin Container view 20-pts from the bottom of the button, and 8-pts from left, right and bottom 
     theContainerView.topAnchor.constraint(equalTo: btn.bottomAnchor, constant: 20.0).isActive = true 
     theContainerView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 8.0).isActive = true 
     theContainerView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -8.0).isActive = true 
     theContainerView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -8.0).isActive = true 

     // pin Stack view 8-pts from top, left, right and bottom of the Container view 
     theStackView.topAnchor.constraint(equalTo: theContainerView.topAnchor, constant: 8.0).isActive = true 
     theStackView.leftAnchor.constraint(equalTo: theContainerView.leftAnchor, constant: 8.0).isActive = true 
     theStackView.rightAnchor.constraint(equalTo: theContainerView.rightAnchor, constant: -8.0).isActive = true 
     theStackView.bottomAnchor.constraint(equalTo: theContainerView.bottomAnchor, constant: -8.0).isActive = true 

    } 

} 

let vc = TestViewController() 
vc.view.backgroundColor = .yellow 
PlaygroundPage.current.liveView = vc 
関連する問題