8

私のテキストはポートレートモードで2行の長さです。横向きモードに切り替えると、1行に収まります。ストーリーボードを介して静的なテーブルビューセルを使用しています。ぴったり合うように行のサイズを変更するにはどうすればよいですか?

画面はサインイン画面です。

  • 最初のセルには説明テキストが含まれています
  • 2つ目は、アカウント名を入力するためのテキストフィールドです。
  • 3つ目は、パスワードを入力するための安全なテキストフィールドです。
  • 4番目(そして最後)のセルにはサインインボタンが含まれています。キーボードのリターンキーは、フォームを送信するか、必要に応じてフォーカスを切り替えます
4

3 に答える 3

9

使用UITableView's heightForRowAtIndexPath

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
   int topPadding = 10;
   int bottomPadding = 10;
   float landscapeWidth = 400;
   float portraitWidth = 300;

   UIFont *font = [UIFont fontWithName:@"Arial" size:22];

   //This is for first cell only if you want for all then remove below condition
   if (indexPath.row == 0) // for cell with dynamic height
   {
      NSString *strText = [[arrTexts objectAtIndex:indexPath.row]; // filling text in label  
     if(landscape)//depends on orientation
     {
       CGSize maximumSize = CGSizeMake(landscapeWidth, MAXFLOAT); // change width and height to your requirement
     }
     else //protrait
     {
       CGSize maximumSize = CGSizeMake(portraitWidth, MAXFLOAT); // change width and height to your requirement
     }

     //dynamic height of string depending on given width to fit
     CGSize textSize = CGSizeZero;
     if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")
     {
        NSMutableParagraphStyle *pstyle = [NSMutableParagraphStyle new];
        pstyle.lineBreakMode = NSLineBreakByWordWrapping;

        textSize = [[strText boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName :font,NSParagraphStyleAttributeName:[pstyle copy]} context:nil] size];
     }
     else // < (iOS 7.0)
     {
        textSize = [strText sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping] 
     }

     return (topPadding+textSize.height+bottomPadding) // caculate on your bases as u have string height
   }
   else
   {
       // return height from the storyboard
       return [super tableView:tableView heightForRowAtIndexPath:indexPath];
   }
 }

編集:iOS7.0ではメソッドが非推奨になるsupportために追加されました> and < ios7sizeWithFont

于 2012-08-16T05:27:46.657 に答える
8

私はもう少し簡単な実装で成功しました。静的テーブルビューにセルに対する適切な制約がある限り、システムにサイズを設定するように依頼できます。

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
    let cell = self.tableView(self.tableView, cellForRowAtIndexPath: indexPath)
    let height = ceil(cell.systemLayoutSizeFittingSize(CGSizeMake(self.tableView.bounds.size.width, 1), withHorizontalFittingPriority: 1000, verticalFittingPriority: 1).height)
    return height
}
于 2015-11-19T17:31:52.640 に答える
1

これは、ラベルに上部と下部の制約が設定されている適切な制約を使用して機能し、このようにheightForRowAtでUITableViewAutomaticDimensionを返すようになりました。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

私の場合、スタックビュー内にいくつかのラベルがあり、セルを拡大するには、スタックビューの上下をcontentViewに設定する必要がありました。

于 2018-04-26T14:33:15.963 に答える