UISegmentedControl の丸みを帯びた角を取り除く方法はありますか、それともデフォルトの動作ですか?
6 に答える
UISegmentedControlの丸みを帯びたジャンクを取り除くためにできる非常に簡単な方法があります...スタイルを「7」に変更します。冗談じゃない。私はちょうどこれを理解しました:
// Magic number ... (it's cheating, but it works)
mySegmentedBar.segmentedControlStyle = 7;
これは、次のように、UISearchBar のスコープ バーで使用するのと同じコントロール スタイルです。
しかし、検索せずにスコープ バーのみが必要な場合は、通常、次のような UISegmentedControl ジャンク (角が丸い) で立ち往生します。
さらに悪いことに、これは...
ありがたいことに、バー スタイル "7" に切り替えることで、サブクラス化や drawRect ハッカーを一切使わずに、ストップ バーの正確な外観を得ることができます。
いいえ、セグメントのレイアウトを制御できる API はありません。
UISegmentedControl の view.subviews を調べて、必要に応じて変更してみてください。しかし、個人的な経験から、私はそれをアドバイスしません。Apple が将来的に注文を変更した場合、アプリはおそらくクラッシュします。最も簡単な方法は、トグル ボタンとして動作し、UISegmentedControls のように制御するカスタム UIButton を作成することです (トグル ボタンについては、 UIButton をトグル スイッチとして使用する方法 を参照してください)。
別の外観が必要な場合は、それをサブクラス化し、 で独自の描画を行うことができます-drawRect:
。Quartz/Core Graphics を使用した描画については、Quartz 2D プログラミング ガイドを参照してください。
何度も試した後、背景画像やサブクラス化なしで正常に機能するソリューションを以下に示しました。
mySegmentedControl.tintColor = [UIColor clearColor]; //Clear all border
//Draw your own border
mySegmentedControl.layer.borderColor = [UIColor blackColor].CGColor;
mySegmentedControl.layer.borderWidth = 1.0;
//Set tint color for selected subview
UIColor *tintcolor=[UIColor redColor];
int subViewIndex = 0; //index which is selected
[[_segmentControl.subviews objectAtIndex:subViewIndex] setTintColor:tintcolor];