2

明確にするために、2 つのオーバーレイされたスクリーンショットを追加します。1 つは Interface Builder に、もう 1 つはデバイスに表示されます。下部の UISegmentedControl は、プロパティを編集せずにライブラリから取り出したばかりですが、デバイス上では異なって見えます (この場合は Retina 以外の iPad ですが、問題は Retina-iPhone でも同じです)。 )

ベゼル スタイル UISegmentedControl

何か案は?

編集:私は明らかに、Interface Builder の [ユーティリティ] タブの [コントロール] の下にある [配置] を試しました。残念ながら、UISegment のタイトルの設定は何も変更されませんでした。Interface Builderでもタイトルを変更していないので、そうすべきではないと思います。

EDIT2: プログラムによる設定:

eyeSeg.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

どちらも違いはありません。

4

3 に答える 3

2

「UISegmentedControlStyleBezeled は非推奨です。別のスタイルを使用してください。」という問題が見つかりました。

deprecated-uisegmented controlstylebezeled-in-io の代わりに何を使用すべきかも参照してください。

于 2012-06-08T14:23:34.293 に答える
1

うーん...配置を確認しましたか?たぶんそうです。

于 2012-06-07T23:47:05.510 に答える
0

コードのサンプルで示したように、セグメント化されたコントロール内のUISegmentedControl各ビューのサブビューを再帰的に検索し、プロパティを含むそれぞれのプロパティを変更できます。UISegmented Control のフォント サイズの変更に対するPrimc の投稿の功績により、. ちなみに、フレームの高さを調整して最近切り替えましたが、廃止された後もこのコードをスタイルで使用していました。UILabelsUILabeltextAlignmentUILabelsUISegmentedControlUISegmentedControlStyleBezeledUISegmentedControlStyleBar

- (void)viewDidLoad {
    [super viewDidLoad];
    // Adjust the segment widths to fit the text.  (Will need to calculate widths if localized text is ever used.)
    [aspirationControl setWidth:66 forSegmentAtIndex:0]; // Navel Lint Collector
    [aspirationControl setWidth:48 forSegmentAtIndex:1]; // Deep Thinker
    [aspirationControl setWidth:49 forSegmentAtIndex:2]; // Mental Wizard
    [aspirationControl setWidth:64 forSegmentAtIndex:3]; // Brilliant Professor
    [aspirationControl setWidth:58 forSegmentAtIndex:4]; // Nobel Laureate

    // Reduce the font size of the segmented aspiration control
    [self adjustSegmentText:aspirationControl];
}

- (void)adjustSegmentText:(UIView*)view {
    // A recursively called method for finding the subviews containing the segment text and adjusting frame size, text justification, word wrap and font size
    NSArray *views = [view subviews];
    int numSubviews = views.count;

    for (int i=0; i<numSubviews; i++) {
        UIView *thisView = [views objectAtIndex:i];
        // Typecast thisView to see if it is a UILabel from one of the segment controls
        UILabel *tmpLabel = (UILabel *) thisView;
        if ([tmpLabel respondsToSelector:@selector(text)]) {
            // Enlarge frame.  Segments are set wider and narrower to accomodate the text.
            CGRect segmentFrame = [tmpLabel frame];
            // The following origin values were necessary to avoid text movement upon making an initial selection but became unnecessary after switching to a bar style segmented control
            // segmentFrame.origin.x = 1;
            // segmentFrame.origin.y = -1;
            segmentFrame.size.height = 40;
            // Frame widths are set equal to 2 points less than segment widths set in viewDidLoad
            if ([[tmpLabel text] isEqualToString:@"Navel Lint Collector"]) {
                segmentFrame.size.width = 64;
            }
            else if([[tmpLabel text] isEqualToString:@"Deep Thinker"]) {
                segmentFrame.size.width = 46;
            }
            else if([[tmpLabel text] isEqualToString:@"Mental Wizard"]) {
                segmentFrame.size.width = 47;
            }
            else if([[tmpLabel text] isEqualToString:@"Brilliant Professor"]) {
                segmentFrame.size.width = 62;
            }
            else {
                // @"Nobel Laureate"
                segmentFrame.size.width = 56;
            }

            [tmpLabel setFrame:segmentFrame];
            [tmpLabel setNumberOfLines:0];  // Change from the default of 1 line to 0 meaning use as many lines as needed
            [tmpLabel setTextAlignment:UITextAlignmentCenter];
            [tmpLabel setFont:[UIFont boldSystemFontOfSize:12]];
            [tmpLabel setLineBreakMode:UILineBreakModeWordWrap];

        }

        if (thisView.subviews.count) {
            [self adjustSegmentText:thisView];
        }
    }
}

セグメント化されたコントロール ラベル テキストは IB では見栄えが悪いですが、上記のコードを使用すると、デバイスとシミュレーターでは完全に中央に配置され、2 行にまたがって表示されます。

于 2012-07-17T01:25:23.203 に答える