What is Causing this Unwanted Content Inset with UITextView in iOS 8 (not there in iOS 7)?

前端 未结 2 1195
旧巷少年郎
旧巷少年郎 2021-01-03 01:52

I\'ve been creating UITextViews programatically, using auto layout, in iOS 7. Something like this:

_textView = [UITextView new];
_textView.trans         


        
相关标签:
2条回答
  • 2021-01-03 02:42

    I think automaticallyAdjustsScrollViewInsets works a bit differently in iOS 8. In 7, it only applied if the controller's view property was a scrollView. In 8, it seems to apply to scroll views that are subviews of the controllers' view.

    0 讨论(0)
  • 2021-01-03 02:48

    It's the contentInset from the UIViewController.

    It seems that with iOS 8, with my UITextView as it is within my UIViewController, there's a need to explicitly set:

    self.automaticallyAdjustsScrollViewInsets = NO;
    

    Without explicitly setting that, I've checked the difference between a physical iPhone 5s running iOS 7 and the Simulator iPhone 5s running iOS 8.

    Here is some log output, checking the top value for textContainerInset, contentInset and scrollIndicatorInset. In each case, after viewDidLoad and keyboardDidShow.

    iPhone 5s Device running iOS 7:

    2014-09-12 07:55:01.244 Alter[19147:60b] viewDidLoad
    2014-09-12 07:55:01.249 Alter[19147:60b] textContainerInset Top: 8.000000
    2014-09-12 07:55:01.252 Alter[19147:60b] contentInset Top: 0.000000
    2014-09-12 07:55:01.253 Alter[19147:60b] scrollIndicatorInset Top: 0.000000
    
    2014-09-12 07:55:02.515 Alter[19147:60b] keyboardDidShow
    2014-09-12 07:55:02.516 Alter[19147:60b] textContainerInset Top: 8.000000
    2014-09-12 07:55:02.516 Alter[19147:60b] contentInset Top: 0.000000
    2014-09-12 07:55:02.516 Alter[19147:60b] scrollIndicatorInset Top: 0.000000
    

    Simulator iPhone 5s (or 6, or 6 Plus) running iOS 8:

    2014-09-12 07:55:39.395 Alter[2120:109535] viewDidLoad
    2014-09-12 07:55:39.395 Alter[2120:109535] textContainerInset Top: 8.000000
    2014-09-12 07:55:39.396 Alter[2120:109535] contentInset Top: 0.000000
    2014-09-12 07:55:39.396 Alter[2120:109535] scrollIndicatorInset Top: 0.000000
    
    2014-09-12 07:55:39.939 Alter[2120:109535] keyboardDidShow
    2014-09-12 07:55:39.939 Alter[2120:109535] textContainerInset Top: 8.000000
    2014-09-12 07:55:39.939 Alter[2120:109535] contentInset Top: 64.000000
    2014-09-12 07:55:39.939 Alter[2120:109535] scrollIndicatorInset Top: 64.000000
    

    To answer my own question, I don't need to manually set up the NSTextContainer and the NSLayoutManager. Though it might be better to start using the textContainerInset approach, I have the option to adjust the frame if I set this in the parent view controller:

    self.automaticallyAdjustsScrollViewInsets = NO;
    
    0 讨论(0)
提交回复
热议问题