简体   繁体   中英

Autolayout UITextView inside UIScrollView size not correct

So I know there are already a lot of questions about this subject, but I haven't found one that has solved my problem (or perhaps I don't understand the answer).

Alright, so I have set up a scrollview that has an UIView in it, containing an image view at the top (a gradient view which you can ignore), and a textview under it. The textview has to expand with whatever is put inside of it without scrolling (hence why it's in the scrollView).

I have in code:

- (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];

}

Unfortunately, the content size seems to be off by what I think may be 16pts, resulting in a view that looks like this with the text cut off (don't mind the unicode mess in the text): 在此处输入图片说明

Here's a picture of what the view looks like in IB: https://i.imgur.com/hxzzUg2.png

Here's what the constraint hierarchy looks like: https://i.imgur.com/rUepwa2.png

Any help would be greatly appreciated!

EDIT: If I comment out the entire code in the resize function, I get the same result. It would appear that auto-layout is resizing all of this after the function is called...but I thought auto-layout was completed when viewDidLayoutSubviews was called?

Edit 2: I have tried and found that adjusting the frame of the textView even n viewDidAppear has no effect. (I can edit things such as the background color)

我最终要做的是为视图(而不是scrollview)设置相等的宽度和高度,然后在viewDidLayoutSubviews中手动更改高度约束,同时更改textView的框架和scrollView的内容大小。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM