2017-06-01 10 views
0

カスタムUISegmentedコントロールをプログラムに実装しようとしています。 CGRectと並んで(レイアウトの競合が激しくならずに)自動レイアウトを使用する方法や、それを完全に取り除く方法はありますか? 以下は、セグメント化されたコントロールの特定のインスタンスを作成するために使用しているコードです。フレームイニシャライザが必要です。フレームイニシャライザでの自動レイアウトの使用

let seg = YSSegmentedControl(
     frame: CGRect(
      x: 0, 
      y: 0, 
      width: 0, 
      height: 0), 
     titles: [ 
      "First", 
      "Second", 
      "Third" 
     ], 
     action: { 
      control, index in 
      print ("segmented did pressed \(index)") 
     }) 

    seg.delegate = self 
    view.addSubview(seg) 
} 

}

おかげで、 ニック

+0

私は、自動レイアウトを使用すると、実際にはもう常に「常に」です。可能であれば空のイニシャライザを使用し、指定されたイニシャライザがフレームCGRect.zeroを必要とする場合に使用します。あなたの場合、私は明示的なフレームをそれに置き換えます - それはあなたの意図をより明確にします。それからあなたのニーズに合わせて高さ/幅のレイアウトアンカーと配置をします。 – dfd

+0

これはすごくうまくいった。残念ながら、YSSegmentedControlは空の初期化子を除いていないので、CGRect.zeroのルートに移動する必要がありました。私は以前これを試していましたが、高さの幅のアンカーではなく、位置のアンカーしか含まれていませんでした。私は高さと幅のアンカーを追加した後、それは働いた! –

答えて

0

あなたが使用したり、古いスタイルでフレームレイアウトコンストラクタ、または制約を使用する必要があります。 私はこのクラスはstandart YSSegmentedControl()イニシャライザを持っていないとは思わない。

関連する問題