開始:
各セグメントのタイトルに基づいてセグメント化されたコントロールの幅を変更しますか?私が好きなこのよう
しかし、私は、セグメントを追加し、これが起こる:
幅がIBではなく、コードに設定されています。
私が必要とするのは、オンザフライで幅を計算する方法です。
control.width = (labelWidths + marginWidths);
// where marginWidths = (marginWidth * control.numberOfSegments)
開始:
各セグメントのタイトルに基づいてセグメント化されたコントロールの幅を変更しますか?私が好きなこのよう
しかし、私は、セグメントを追加し、これが起こる:
幅がIBではなく、コードに設定されています。
私が必要とするのは、オンザフライで幅を計算する方法です。
control.width = (labelWidths + marginWidths);
// where marginWidths = (marginWidth * control.numberOfSegments)
その目的のために正常に動作しますが、これはそれではありませんhere prgrmrの答えでメソッド:最後で、それはこのような何かをするだろう。
ではなくカスタムUILabelのサブビューで不要なオーバーヘッドを追加し、
私はこれを考え出す上記のリンクでサンプルコードを変更した:
- (void)resizeSegmentsToFitTitles:(UISegmentedControl *)control {
CGFloat textWidth = 0; // total width of all text labels
CGFloat marginWidth = 0; // total width of all margins
NSUInteger nSegments = control.subviews.count;
UIView *aSegment = [control.subviews objectAtIndex:0];
UIFont *theFont = nil;
// get font for segment title label
for (UILabel *label in aSegment.subviews) {
if ([label isKindOfClass:[UILabel class]]) {
theFont = label.font;
break;
}
}
// calculate width of text in each segment
for (NSUInteger i = 0; i < nSegments; i++) {
NSString *title = [control titleForSegmentAtIndex:i];
CGFloat width = [title sizeWithFont:theFont].width;
CGFloat margin = 15;
if (width > 200) {
NSString *ellipsis = @"…";
CGFloat width2 = [ellipsis sizeWithFont:theFont].width;
while (width > 200-width2) {
title = [title substringToIndex:title.length-1];
width = [title sizeWithFont:theFont].width;
}
title = [title stringByAppendingString:ellipsis];
}
[control setTitle:title forSegmentAtIndex:i];
textWidth += width;
marginWidth += margin;
}
// resize segments to accomodate text size, evenly split total margin width
for (NSUInteger i = 0; i < nSegments; i++) {
// size for label width plus an equal share of the space
CGFloat textWidth = [[control titleForSegmentAtIndex:i]
sizeWithFont:theFont].width;
// the control leaves a 1 pixel gap between segments if width
// is not an integer value; roundf() fixes this
CGFloat segWidth = roundf(textWidth + (marginWidth/nSegments));
[control setWidth:segWidth forSegmentAtIndex:i];
}
// set control width
[control setFrame:CGRectMake(0, 0, (textWidth + marginWidth), 30)];
}
私がなぜ...最後のセグメントがtapableではありませんが、それはいけないタイトルを切り詰めるセグメント化されたコントローラの問題を修正するためにios7内の任意のideeaこれを使用していますか? – user1028028
http://stackoverflow.com/questions/18890428/uisegmentedcontrol-truncates-segment-titles – user1028028
[こちら](http://stackoverflow.com/a/23492688/2254935)は簡素化され、iOS 7のフレンドリーバージョンです。 –