为啥我的 UITextView 在我使用 frame 属性时出现,但在我使用约束时却没有?

Posted

技术标签:

【中文标题】为啥我的 UITextView 在我使用 frame 属性时出现,但在我使用约束时却没有?【英文标题】:Why does my UITextView show up when I'm using the frame property but not when I'm using constraints?为什么我的 UITextView 在我使用 frame 属性时出现,但在我使用约束时却没有? 【发布时间】:2013-01-16 18:10:40 【问题描述】:

我是使用约束的新手,所以我对我做错了什么并不感到惊讶,但我不知道我做了什么和/或如何解决它。

这是我使用frame 属性的方法;它工作正常,文本视图显示:

-(void)displayFeedbackText 
    feedback = [[UITextView alloc] init];
    feedback.backgroundColor = [UIColor clearColor];
    feedback.font = [UIFont fontWithName:@"Helvetica Neue" size:14];
    NSString *t = @"If you have any problems with the" + 16; //Longest line of text view + padding.
    float textWidth = [t sizeWithFont:[UIFont fontWithName:@"Helvetica Neue" size:14]].width;
    float textHeight = [t sizeWithFont:[UIFont fontWithName:@"Helvetica Neue" size:14]].height;
    feedback.text=@"Thank you for buying My Haiku! \nIf you have any problems with the \napp, or if you want to share any \nthoughts or suggestions, please \nemail me at joel@xxxxx.com.";
    feedback.editable=NO;
    feedback.frame = CGRectMake(screenWidth/2-textWidth/2, (screenHeight/2-tabBarHeight) - (textHeight*6)/2, textWidth, textHeight*6);
    feedback.dataDetectorTypes=UIDataDetectorTypeAll;
    [self.view addSubview:feedback];

这是使用约束的方法(我在viewDidLoad 中将self.view.translatesAutoresizingMaskIntoConstraints 设置为NO)。什么都没有显示:

-(void)displayFeedbackText 
    feedback = [[UITextView alloc] init];
    feedback.backgroundColor = [UIColor clearColor];
    feedback.font = [UIFont fontWithName:@"Helvetica Neue" size:14];
    feedback.text=@"Thank you for buying My Haiku! \nIf you have any problems with the \napp, or if you want to share any \nthoughts or suggestions, please \nemail me at joel@xxxxx.com.";
    feedback.editable=NO;
    feedback.dataDetectorTypes=UIDataDetectorTypeAll;
    NSLayoutConstraint *constraintX = [NSLayoutConstraint constraintWithItem:feedback attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
    NSLayoutConstraint *constraintY = [NSLayoutConstraint constraintWithItem:feedback attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
    [self.view addConstraint:constraintX];
    [self.view addConstraint:constraintY];
    [self.view addSubview:feedback];

我做错了什么,我该如何解决?

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

我认为它没有显示是因为您没有大小限制,所以它的大小可能为零。尝试设置显式大小约束或相对于超级视图的约束。如果它们是显式约束,你可以这样做(同样使用高度约束):

NSLayoutConstraint *widthCon = [NSLayoutConstraint constraintWithItem:feedback attribute:NSLayoutAttributeWidth relatedBy:0 toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1  constant:320];
[feedback addConstraint:widthCon];

【讨论】:

以上是关于为啥我的 UITextView 在我使用 frame 属性时出现,但在我使用约束时却没有?的主要内容,如果未能解决你的问题,请参考以下文章

为啥更改 UITextView 的框架原点会完全破坏我的整个框架大小?

为啥我的 UItextView 顶部的子视图没有被触摸?

为啥 UITextView 高度仅在滚动时变为动态?

为啥 UITextview 没有 UITextField 之类的占位符属性 [重复]

如何从外部源更新 uitextview。

UITextView 从底部开始