3

自動レイアウトに関するAppleの公式ドキュメントを読みましたUIScrollView

RN-iOSSDK-6_0

「Pure Auto Layoutアプローチ」を試しています。

と を追加し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ます。私は何を間違っていますか?

ありがとう!

4

1 に答える 1

0

UIScrollViews は少し複雑です。すべてのもみ:

[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

あなたはそれをすべきではありません。ルート ビューは自動レイアウトで動作する必要はありません。サブビューにはそれが必要です。

また、スクロールビューの contentSize は、それらの中に何を入れるかによって定義されます。scrollView の画面サイズを固定したい場合は、そのサブビューの 1 つを画面幅 (または 8 つ) に固定します。そこに表示されているのは、スクロールビューがそのコンテンツをまとめていることであり、幅はおそらくラベル固有のコンテンツ サイズです。

そのため、ビューで機能します。それが役に立てば幸い!!

于 2016-04-25T03:27:59.230 に答える