UIScrollView 使用纯自动布局不向右扩展
Posted
技术标签:
【中文标题】UIScrollView 使用纯自动布局不向右扩展【英文标题】:UIScrollView using pure auto layout not expanding right 【发布时间】:2013-05-31 23:22:10 【问题描述】:我已经阅读了 Apple 关于自动布局和 UIScrollView
的官方文档:
RN-iosSDK-6_0
我正在尝试“纯自动布局方法”。
我正在添加 UILabel
和 UITextField
。我希望两者都扩展到界面的宽度:
RootViewController.h
@interface rootViewController : UIViewController
@property (nonatomic, strong) UIScrollView *scrollView;
@property (nonatomic, strong) UIView *contentView;
@property (nonatomic, strong) UILabel *bigLetters;
@property (nonatomic, strong) UITextField *aTextField;
@end
viewDidLoad
- (void)viewDidLoad
[super viewDidLoad];
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
self.view.backgroundColor = [UIColor lightGrayColor];
_scrollView = [[UIScrollView alloc] init];
[_scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
_contentView = [[UIView alloc] init];
[_contentView setTranslatesAutoresizingMaskIntoConstraints:NO];
_bigLetters = [[UILabel alloc] init];
[_bigLetters setTranslatesAutoresizingMaskIntoConstraints:NO];
_bigLetters.font = [UIFont systemFontOfSize:30];
_bigLetters.textColor = [UIColor blackColor];
_bigLetters.backgroundColor = [UIColor clearColor];
_bigLetters.text = @"Why so small?";
_bigLetters.textAlignment = NSTextAlignmentCenter;
_aTextField = [[UITextField alloc] init];
_aTextField.backgroundColor = [UIColor whiteColor];
_aTextField.placeholder = @"A Text Box";
[_aTextField setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:_scrollView];
[self.scrollView addSubview:_contentView];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_scrollView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_scrollView)]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_contentView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_contentView)]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_contentView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_contentView)]];
[self.contentView addSubview:_bigLetters];
[self.contentView addSubview:_aTextField];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_bigLetters]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_bigLetters)]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_aTextField]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_aTextField)]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[_bigLetters]-[_aTextField]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_bigLetters, _aTextField)]];
// Do any additional setup after loading the view.
我将两个元素都压在左上角,如下所示:
如果我将 _scrollView 切换到 UIView
,一切看起来都很好。我做错了什么?
谢谢!
【问题讨论】:
这里看Rob的回答,***.com/a/16843937/1285133你需要让contentView等于主视图。 谢谢 rdelmar。这正是我所需要的! 【参考方案1】:UIScrollViews 有点复杂。 首先:
[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];
你不应该那样做。您的根视图不需要使用自动布局。您的子视图需要它。
此外,滚动视图的 contentSize 由您放入其中的内容定义。如果您想要一个 scrollView 屏幕大小的修复它的子视图之一到屏幕宽度(或八个)。 你在那里看到的是你的滚动视图包裹了它的内容,宽度可能是标签的内在内容大小。
这就是它与视图一起使用的原因。 希望对你有帮助!!
【讨论】:
以上是关于UIScrollView 使用纯自动布局不向右扩展的主要内容,如果未能解决你的问题,请参考以下文章
Interface Builder 对 UIScrollView 的正确约束是啥?来自 IB 的纯自动布局
UIScrollView 中的 UITextView 使用自动布局
UIScrollView 不使用 AutoLayout 滚动