0

aUILabelと aUIButtonを除いて動的に変化するテキストがあり、UILabelそれらを単一のラベルとして表示したいので、単一行で中央揃えにする必要がありますが、下線付きのテキスト「The Gluten free foodie」を図に示すと、両方の動作が異なりますテキストとは異なり、クリック可能な機能Found by。写真の「The Gluten free foodie」のようなボタンのテキストが非常に長くなる場合、このタスクを達成する方法がわかりません。次に、写真のようにラベルを左に移動するにはどうすればよいですか。前もって感謝します。 ここに画像の説明を入力

4

4 に答える 4

2

これを試して:

NSString *text1 = @"Found by ";  //text of your uilabel
CGSize constraint1 = CGSizeMake(320, 2000);   //suppose your total width of superview is 320
CGSize size1 = [text1 sizeWithFont:[UIFont fontWithName:@"ArialMT" size:12.0] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];   //font which are used in your "Found by" label


NSString *text2 = @"The Gluten free foodie";  //text of your uibutton
CGSize constraint2 = CGSizeMake(320, 2000);
CGSize size2 = [text2 sizeWithFont:[UIFont fontWithName:@"Arial-BoldMT" size:12.0] constrainedToSize:constraint2 lineBreakMode:UILineBreakModeWordWrap];    //font which are used in your "The Gluten free foodie" button

float finalwidth = size1.width + size2.width + 2;
float centerx = 320 - finalwidth;      //suppose your total width of view is 320
centerx = centerx/2.0;

lblFoundBy.frame = CGRectMake(centerx, 20, size1.width, size1.height);
btnThe.frame = CGRectMake(centerx + size1.width + 2, 20, size2.width, size2.height);
  1. そのラベルのテキストに基づいてラベルの幅を見つける
  2. そのボタンのタイトルに基づいてボタンの幅を見つけます
  3. ラベル、ボタン、およびこれら 2 つの間のスペースの合計幅を取得します。
  4. その合計幅を uiview (ボタンとラベルのスーパービュー) の幅 (320 と仮定) から引きます。
  5. 最後に、合計の余分なスペースが得られます。その後、この余分なスペースは 2 で割られます。
  6. そして最後に、それに基づいて、ラベルとボタンのフレーム (x 位置が重要です) を設定します。
于 2013-05-14T12:30:28.147 に答える
1

この場合、ios6以降のバージョンのこのアプリなら、このようにすることができます...

NSString *infoString=@"Founded by The Gluten free foodie";

    NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:infoString];
    NSInteger _stringLength=[infoString length];

// ------------------ Give your range for underline 
    [attString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:1] range:NSMakeRange(10, _stringLength-10)];

    label.attributedText = attString;

    [label setBackgroundColor:[UIColor clearColor]];

// ---------------- Give frame according to your text -------
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(70, 15, 195, 35);

    [btn addTarget:self action:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];

    [label addSubview:btn];

    [label setUserInteractionEnabled:YES];

そして、この画像を見てください ここに画像の説明を入力

于 2013-05-14T12:37:40.940 に答える
0

2 つのラベルを使用できます。最初の幅は修正されます。次の方法を使用して、秒の幅を計算します。

[[label text] sizeWithFont:label.font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

アップルのドキュメントを調べて、その仕組みを見つけてください。幅を取得したら、両方のフレームを指定できます。160-両方のラベルの幅の合計/2 最初のラベルの x を取得します。この x + 最初のラベルの幅により、2 番目のラベルの x が得られます。

于 2013-05-14T12:27:45.590 に答える