UITextView is not scrolled to top when loaded

后端 未结 12 1240
别跟我提以往
别跟我提以往 2020-12-03 02:39

When I have text that does not fill the UITextView, it is scrolled to the top working as intended. When there is more text than will fit on screen, the UITextView is scrolle

12条回答
  •  执笔经年
    2020-12-03 02:57

    UITextView is a subclass of UIScrollView, so you can use its methods. If all you want to do is ensure that it's scrolled to the top, then wherever the text is added try:

    [self.mainTextView setContentOffset:CGPointZero animated:NO];
    

    EDIT: AutoLayout with any kind of scrollview gets wonky fast. That setting a fixed width solves it isn't surprising. If it doesn't work in -viewDidLayoutSubviews then that is odd. Setting a layout constraint manually may work. First create the constraints in IB:

    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *textViewWidthConstraint;
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *textViewHeightConstraint;
    

    then in the ViewController

        -(void)updateViewConstraints {
                self.textViewWidthConstraint.constant = self.view.frame.size.width - 40.0f;
                self.textViewHeightConstraint.constant = self.view.frame.size.height - 40.0f;
                [super updateViewConstraints];
            }
    

    May still be necessary to setContentOffset in -viewDidLayoutSubviews.

    (Another method would be to create a layout constraint for "'equal' widths" and "'equal' heights" between the textView and its superView, with a constant of "-40". It's only 'equal' if the constant is zero, otherwise it adjusts by the constant. But because you can only add this constraint to a view that constraints both views, you can't do this in IB.)

    You may ask yourself, if I have to do this, what's the point of AutoLayout? I've studied AutoLayout in depth, and that is an excellent question.

提交回复
热议问题