【问题标题】:Adjusting the height of the UITextField with editing using iOS Autolayout使用 iOS 自动布局通过编辑调整 UITextField 的高度
【发布时间】:2014-11-05 04:14:19
【问题描述】:

我们如何在使用自动布局进行编辑时增加UITextField 的高度。我有一个UIScrollView 和四个UITextField's。目前所有文本字段的高度都是恒定的。我只需要一个特定的文本字段来在编辑时根据文本增加它的高度。

【问题讨论】:

    标签: ios objective-c xcode uitextfield autolayout


    【解决方案1】:

    您需要为每个文本字段设置高度限制。

    在编辑结束方法时,您需要通过标签识别文本字段,然后更改相应文本字段的常量。

    例如。 heightTxt1,heightTxt2,heightTxt3,heightTxt4 是约束。

    在编辑结束时更改需要文本字段 1

       heightTxt1.constant= (count height on the basis of text and font style,size);
    

    这应该可以解决您的问题,

    【讨论】:

      【解决方案2】:

      第 1 步:将标签中的行数设置为 0

      第 2 步:将此方法添加到您的类文件中

      //-- Dynamic label frame depend on text 
      -(CGRect)getLabelHeightForIndex:(UILabel *)label label_string:(NSString *)label_string
      {
          CGSize maxSize = CGSizeMake(label.frame.size.width, 999);
          CGRect contentFrame;
          CGSize contentStringSize;
          NSString *version = [[UIDevice currentDevice] systemVersion];
          NSString *contentStr = label_string;
      
          if ([version floatValue] < 7.0)
          {
              contentStringSize = [contentStr sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];
          }
          else
          {
              NSDictionary *contentDic = [NSDictionary dictionaryWithObjectsAndKeys:label.font, NSFontAttributeName, nil];
              contentStringSize = [contentStr boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:contentDic context:nil].size;
          }
          contentFrame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, contentStringSize.height);
          return contentFrame;
      }
      

      第 3 步:使用以下代码访问标签的动态框架

      //-- Get dynamic label height from given string
          CGRect contentFrame = [self getLabelHeightForIndex:Label label_string:Label.text];
          Label.frame = contentFrame;
          CGFloat LabelHeight = contentFrame.size.height;
      

      【讨论】:

      • 没问题。只需在该方法中将 uilabel 替换为 uitextfield 即可。
      【解决方案3】:

      首先,您需要将特定UITextField 的高度约束存储在属性中。

      例如:@property (nonatomic, weak) IBOutlet NSLayoutConstraint *specificTextFieldHeightConstraint;

      然后,在 UIViewController 子类中实现 -[UITextFieldDelegate textFieldDidBeginEditing:]

      - (void)textFieldDidBeginEditing:(UITextField *)textField {
          specificTextFieldHeightConstraint.constant = expandedHeightGoesHere;
      }
      

      最后,您可能希望通过在 UIViewController 子类中实现 -[UITextFieldDelegate textFieldDidEndEditing:] 将高度恢复正常:

      - (void)textFieldDidEndEditing:(UITextField *)textField {
          specificTextFieldHeightConstraint.constant = originalHeightConstant;
      }
      

      如果您在所有UITextFields 上设置等高约束,则需要在编辑时将附加到specificTextField 的等高约束的优先级设置为低,然后将其设置回高编辑结束时。您仍然需要对specificTextField 进行高度约束,但当specificTextField 未编辑时,它的优先级应低于等高约束,而当specificTextField 正在编辑时,它的优先级应高于等高约束.

      【讨论】:

      • OP 询问如何基于文本扩展文本字段。不过,这回答了一半的问题。
      猜你喜欢
      • 2014-01-06
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      相关资源
      最近更新 更多