使用iOS进行编辑以调整UITextField的高度Autolayout

问题描述:

如何在使用自动布局进行编辑时增加UITextField的高度。我有一个UIScrollView四个UITextField's。目前所有的textfield都是不变的高度。在编辑时,我只需要一个特定的文本框来根据文本增加高度。使用iOS进行编辑以调整UITextField的高度Autolayout

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

而在编辑做结束的方法,你需要通过标签来识别文本字段,而不是改变适当的文本字段的常量。

for ex。 heightTxt1,heightTxt2,heightTxt3,heightTxt4是约束条件。

比变化,而编辑也结束呼吁文本框1

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

这应该解决您的问题,

第1步:设置没有线在你的标签为0

enter image description here

第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; 
+0

这是'UITextField' – 2014-11-05 05:43:13

+0

没问题。只需在该方法中将uilabel替换为uitextfield即可。 – svmrajesh 2014-11-05 05:48:21

首先,你将要存储的高度限制在一个属性,特定UITextField

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

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

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

最后,你可能希望通过实施-[UITextFieldDelegate textFieldDidEndEditing:]UIViewController子类中,返回的高度恢复正常:

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

如果在所有UITextFields之间设置了相等的高度约束,则在编辑时需要将与specificTextField相关的等高限制的优先级设置为低,并在编辑结束时将其设置回高。在specificTextField上仍然需要高度约束,但specificTextField未编辑时,它的优先级应低于等高度约束,并且在specificTextField正在编辑时,它的优先级应高于等高度约束。

+0

OP询问如何根据文本**扩展文本字段**。这虽然回答了一半的问题。 – 2014-11-05 05:44:08