UIScrollView 内的自动布局 UITextView 大小不正确
Autolayout UITextView inside UIScrollView size not correct
所以我知道已经有很多关于这个主题的问题,但我还没有找到解决我问题的问题(或者我不明白答案)。
好的,所以我设置了一个滚动视图,其中有一个 UIView,顶部包含一个图像视图(您可以忽略的渐变视图),下面是一个文本视图。 textview 必须在不滚动的情况下随放入其中的任何内容展开(因此它在 scrollView 中)。
我有代码:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self setupGradientView];
[self resize];
}
- (void) resize {
CGFloat maxWidth = [[UIScreen mainScreen] bounds].size.width;
CGRect newFrame;
// reset width for scrollview
newFrame = imageView.frame;
newFrame.size = CGSizeMake(maxWidth, imageView.frame.size.height);
imageView.frame = newFrame;
gradientView.frame = newFrame;
newFrame = textView.frame;
newFrame.size = CGSizeMake(maxWidth, textView.frame.size.height);
//textView.frame = newFrame;
newFrame = dummyView.frame;
newFrame.size = CGSizeMake(maxWidth, dummyView.frame.size.height);
dummyView.frame = newFrame;
// resize height
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, CGFLOAT_MAX)];
newFrame = textView.frame;
newFrame.size = CGSizeMake(fixedWidth, newSize.height);
//textView.frame = newFrame;
self.textViewHeightConstraint.constant = newSize.height;
CGFloat dummyViewHeight = textView.frame.origin.y + textView.frame.size.height;
dummyView.frame = CGRectMake(dummyView.frame.origin.x, dummyView.frame.origin.y, dummyView.frame.size.width, dummyViewHeight);
[scrollView setContentSize:dummyView.frame.size];
}
不幸的是,内容大小似乎偏离了我认为可能是 16pts,导致视图看起来像这样,文本被截断了(不要介意文本中的 unicode 混乱):
这是 IB 中视图的图片:https://i.imgur.com/hxzzUg2.png
约束层次结构如下所示:https://i.imgur.com/rUepwa2.png
如有任何帮助,我们将不胜感激!
编辑: 如果我注释掉调整大小函数中的整个代码,我会得到相同的结果。调用函数后自动布局似乎正在调整所有这些...但我认为自动布局在调用 viewDidLayoutSubviews 时完成?
编辑 2: 我试过发现调整 textView 的框架甚至 n viewDidAppear 都没有效果。 (我可以编辑背景颜色等)
我最终要做的是为视图(不是滚动视图)设置等宽和等高,然后手动更改 viewDidLayoutSubviews 中的高度约束,同时更改 textView 的框架和内容大小滚动视图的。
所以我知道已经有很多关于这个主题的问题,但我还没有找到解决我问题的问题(或者我不明白答案)。
好的,所以我设置了一个滚动视图,其中有一个 UIView,顶部包含一个图像视图(您可以忽略的渐变视图),下面是一个文本视图。 textview 必须在不滚动的情况下随放入其中的任何内容展开(因此它在 scrollView 中)。
我有代码:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self setupGradientView];
[self resize];
}
- (void) resize {
CGFloat maxWidth = [[UIScreen mainScreen] bounds].size.width;
CGRect newFrame;
// reset width for scrollview
newFrame = imageView.frame;
newFrame.size = CGSizeMake(maxWidth, imageView.frame.size.height);
imageView.frame = newFrame;
gradientView.frame = newFrame;
newFrame = textView.frame;
newFrame.size = CGSizeMake(maxWidth, textView.frame.size.height);
//textView.frame = newFrame;
newFrame = dummyView.frame;
newFrame.size = CGSizeMake(maxWidth, dummyView.frame.size.height);
dummyView.frame = newFrame;
// resize height
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, CGFLOAT_MAX)];
newFrame = textView.frame;
newFrame.size = CGSizeMake(fixedWidth, newSize.height);
//textView.frame = newFrame;
self.textViewHeightConstraint.constant = newSize.height;
CGFloat dummyViewHeight = textView.frame.origin.y + textView.frame.size.height;
dummyView.frame = CGRectMake(dummyView.frame.origin.x, dummyView.frame.origin.y, dummyView.frame.size.width, dummyViewHeight);
[scrollView setContentSize:dummyView.frame.size];
}
不幸的是,内容大小似乎偏离了我认为可能是 16pts,导致视图看起来像这样,文本被截断了(不要介意文本中的 unicode 混乱):
这是 IB 中视图的图片:https://i.imgur.com/hxzzUg2.png
约束层次结构如下所示:https://i.imgur.com/rUepwa2.png
如有任何帮助,我们将不胜感激!
编辑: 如果我注释掉调整大小函数中的整个代码,我会得到相同的结果。调用函数后自动布局似乎正在调整所有这些...但我认为自动布局在调用 viewDidLayoutSubviews 时完成?
编辑 2: 我试过发现调整 textView 的框架甚至 n viewDidAppear 都没有效果。 (我可以编辑背景颜色等)
我最终要做的是为视图(不是滚动视图)设置等宽和等高,然后手动更改 viewDidLayoutSubviews 中的高度约束,同时更改 textView 的框架和内容大小滚动视图的。