【问题标题】:Resized UILabel snaps back to initial size调整大小的 UILabel 恢复为初始大小
【发布时间】:2013-03-05 04:40:13
【问题描述】:

在我的应用程序的详细视图(滚动视图)上,我有一个 UILabel,它可以获取大约 1000 个单词的文本。

我想调整它的大小以适应标签 - 到目前为止工作正常

-(void) viewDidAppear:(BOOL)animated {
NSString *message = storycontent.text;
CGSize maximumLabelSize = CGSizeMake(280,5000);
CGSize expectedLabelSize = [message sizeWithFont:storycontent.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];
CGRect newFrame = storycontent.frame;
newFrame.size.height = expectedLabelSize.height;
storycontent.frame = newFrame;
}

当导航到该详细视图时,标签按预期调整大小。 现在奇怪的是:当我想向下滚动时,UILabel 会恢复到初始大小,因此只有第一个单词是可见的。

我能做些什么来避免这种行为?

更新: 当我删除标签并放入新标签时,它工作正常。当我将字体大小更改为 17 以外的值时,奇怪的行为就开始了。

【问题讨论】:

  • 取一个Label取一个textView
  • 我通过 textview 得到相同的行为。当我开始滚动时,它的大小调整为对象的初始高度:(
  • 您能否记录下您的 newFrame 和 storyContent 框架
  • 你在使用自动布局吗?
  • 转到界面生成器中的文件检查器,并取消选中“使用自动布局”。

标签: iphone ios uilabel


【解决方案1】:

我当前的解决方案(或解决方法)现在是停用“使用自动布局”(感谢 Mark Kryzhanouski),这解决了捕捉问题。

由于没有自动布局,滚动视图不会自动调整大小,所以我添加了

@property (retain, nonatomic) IBOutlet UIScrollView *scroller;

并使用我从上面已经知道的内容大小以及将始终显示的静态内容为其计算一个新的 FrameSize。

NSString *message = storycontent.text;
CGSize maximumLabelSize = CGSizeMake(280,5000);
CGSize expectedLabelSize = [message sizeWithFont:storycontent.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

[scroller setContentSize:CGSizeMake(280,expectedLabelSize.height + 400)];

也许有办法在“使用自动布局”激活的情况下做同样的事情?!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多