这里的声明:
这有自定义字体,所以就忽略自定义字体,还具有自定义调整功能,弯曲到所有的iphone尺寸宏和自定义颜色,忽略那些还有:
_scrollPlaceholder = [UIScrollView new];
[_scrollPlaceholder setDelegate:self];
[_scrollPlaceholder setShowsHorizontalScrollIndicator:FALSE];
[_scrollPlaceholder setPagingEnabled:false];
[_scrollPlaceholder setBackgroundColor:NSHMasterLightBlueColor];
[_scrollPlaceholder setFrame:CGRectMake(0, heightResizer(50)+heightForNSHNavBar, SCREEN_WIDTH, heightResizer(50))];
[_scrollPlaceholder setContentSize:CGSizeMake(SCREEN_WIDTH*3, heightResizer(50))];
[_scrollPlaceholder setScrollEnabled:true];
[_scrollPlaceholder setKeyboardDismissMode:UIScrollViewKeyboardDismissModeInteractive || UIScrollViewKeyboardDismissModeOnDrag];
[_scrollPlaceholder setBounces:false];
[_scrollPlaceholder setDirectionalLockEnabled:true];
[self addSubview:_scrollPlaceholder];
UIView *contentView;
contentView = [[UIView alloc] initWithFrame:CGRectMake(0,0,SCREEN_WIDTH*2.2, heightResizer(50))];
[_scrollPlaceholder addSubview:contentView];
[_scrollPlaceholder setContentSize:CGSizeMake(SCREEN_WIDTH*2.2, heightResizer(50))];
这里的约束上:
NSDictionary * views = NSDictionaryOfVariableBindings(_searchOption1, _searchOption2, _searchOption3, _searchOption4, _searchOption6, _searchOption7, sp1, sp2, sp3,sp4,sp6,sp7,sp8);
NSDictionary * metrics = @{@"sp" : @10, @"spd" : @(heightResizer(40)), @"this" : @(widthResizer(157.0))};
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[sp1(>=0)]-[_searchOption1]-[sp2(==sp1)]-[_searchOption2]-[sp3(==sp1)]-[_searchOption3]-[sp4(==sp1)]-[_searchOption4]-[sp6(==sp1)]-[_searchOption6]-[sp7(==sp1)]-[_searchOption7]-[sp8(==sp1)]-|" options:0 metrics:metrics views:views]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchOption1(spd)]" options:0 metrics:metrics views:views]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchOption2(spd)]" options:0 metrics:metrics views:views]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchOption3(spd)]" options:0 metrics:metrics views:views]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchOption4(spd)]" options:0 metrics:metrics views:views]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchOption6(spd)]" options:0 metrics:metrics views:views]];
[contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_searchOption7(spd)]" options:0 metrics:metrics views:views]];
你看,内容画面的大小与滚动视图的内容取景,这里的甜点是宏观调节大小是即使您基本上将高度和宽度以及垂直和高度约束声明为常量,也可以使srollview在自动布局中弹性化。
宏,好措施:
#define SCREEN_WIDTH ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height)
#define SCREEN_HEIGHT ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width)
#define hi(n) n/736.00 //<=== set to largest iphone screen height = iphone 6+
#define his(n) n/414.00 //<=== set to largest iphone screen width = iphone 6+
#define heightResizer(n) hi(n)*SCREEN_HEIGHT
#define widthResizer(n) his(n)*SCREEN_WIDTH
此外,还有一点,没有必要反复折腾布局子视图或类似的东西,你最多可以在viewDidLoad中或在声明和设置所有的这子类的默认初始化程序,您并不需要太多考虑,也可以为在内容视图中设置的约束设置动画。
另一种方法是,如果你设置了没有内容视图的UIScrollView,那么你将不得不用明确的方式声明所有的水平约束,以便它永不收缩,参见下面的内容:
_redBackGround = [UIScrollView new];
[_redBackGround setDelegate:self];
[_redBackGround setShowsHorizontalScrollIndicator:FALSE];
[_redBackGround setBackgroundColor:[UIColor whiteColor]];
[_redBackGround setTranslatesAutoresizingMaskIntoConstraints:FALSE];
[_redBackGround setScrollEnabled:true];
[_redBackGround setDirectionalLockEnabled:YES];
[_redBackGround setFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
[_redBackGround setKeyboardDismissMode:UIScrollViewKeyboardDismissModeInteractive || UIScrollViewKeyboardDismissModeOnDrag];
[self addSubview:_redBackGround];
views = NSDictionaryOfVariableBindings(aboutDivider, notificationsDividier, _emailSettingsControl, _passwordSettingsControl, _phoneNumberSettingsControl, _privacyPolicyLinker, _versionNumber, _systemInfoLinker, _userStatsLinker, _contactUsLinker, _termsOfUserLinker, spacerLine1, spacerLine2, spacerLine3, spacerLine4, spacerLine5, spacerLine6, spacerLine7, spacerLine8, spacerLine9, spacerLine10, spacerLine11, _collectionSettings, _messageSettings, _commentSettings, _likesSettings, spacerLinea11, commentsSettingsLabel, collectionsSettingsLabel, messageSettingsLabel, likeSettingsLabel, _zipCodeControl, _zipCodeControl, _catchyMotoControl, spacerLinea12, spacerLinea13, phoneNumberLabel, passwordLabel, emailLabel, zipCodeLabel, catchyLabelControl);
metrics = @{@"bi" : @(widthResizer(5.0)), @"bh" : @(widthResizer(15.0)), @"sbh" : @(widthResizer(2.0)), @"aw" : @50, @"ah" : @50, @"sp" : @3, @"spd" : @(widthResizer(15.0)), @"sps" : @Spacer, @"fo": @(heightResizer(44.0)), @"smo": @(widthResizer(88.0)), @"fok": @(heightResizer(44.00)), @"spa" : @(widthResizer(20.0)), @"u" : @(widthResizer(404.0)), @"uss" : @(heightResizer(20.0))};
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine1(u)]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine2]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine3]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine4]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine5]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine6]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine7]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine8]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine9]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine10]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine11]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLinea11]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLinea12]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLinea13]-bi-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[catchyLabelControl]-sbh-[_catchyMotoControl]-sbh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[zipCodeLabel]-sbh-[_zipCodeControl]-sbh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[phoneNumberLabel]-sbh-[_phoneNumberSettingsControl]-sbh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[passwordLabel]-sbh-[_passwordSettingsControl]-sbh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[emailLabel]-sbh-[_emailSettingsControl]-sbh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[notificationsDividier]|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[likeSettingsLabel][_likesSettings(smo)]-bh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[commentsSettingsLabel][_commentSettings(smo)]-bh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[messageSettingsLabel][_messageSettings(smo)]-bh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-spa-[collectionsSettingsLabel][_collectionSettings(smo)]-bh-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[aboutDivider]|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_privacyPolicyLinker]-spd-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_versionNumber]-spd-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_systemInfoLinker]-spd-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_userStatsLinker]-spd-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_contactUsLinker]-spd-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_termsOfUserLinker]-spd-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-uss-[_phoneNumberSettingsControl(fok)]-sp-[spacerLine1(sps)]-sp-[_passwordSettingsControl(fok)]-sp-[spacerLine2(sps)]-sp-[_emailSettingsControl(fok)]-sp-[spacerLinea13(sps)]-sp-[_zipCodeControl(fok)]-sp-[spacerLinea12(sps)]-sp-[_catchyMotoControl(fok)]-sp-[notificationsDividier(20)]-sp-[_likesSettings(fo)]-sp-[spacerLine9(sps)]-sp-[_commentSettings(fo)]-sp-[spacerLine10(sps)]-sp-[_messageSettings(fo)]-sp-[spacerLine11(sps)]-sp-[_collectionSettings(fo)]-sp-[aboutDivider(20)]-sp-[_privacyPolicyLinker(fok)]-sp-[spacerLine4(sps)]-sp-[_versionNumber(fok)]-sp-[spacerLine5(sps)]-sp-[_systemInfoLinker(fok)]-sp-[spacerLine6(sps)]-sp-[_userStatsLinker(fok)]-sp-[spacerLine7(sps)]-sp-[_contactUsLinker(fok)]-sp-[spacerLine8(sps)]-sp-[_termsOfUserLinker(fok)]-sp-[spacerLinea11(sps)]-sp-|" options:0 metrics:metrics views:views]];
[_redBackGround addConstraint:[NSLayoutConstraint
constraintWithItem:passwordLabel
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:_passwordSettingsControl
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0]];
[_redBackGround addConstraint:[NSLayoutConstraint
constraintWithItem:emailLabel
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:_emailSettingsControl
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0]];
[_redBackGround addConstraint:[NSLayoutConstraint
constraintWithItem:phoneNumberLabel
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:_phoneNumberSettingsControl
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0]];
[_redBackGround addConstraint:[NSLayoutConstraint
constraintWithItem:zipCodeLabel
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:_zipCodeControl
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0]];
[_redBackGround addConstraint:[NSLayoutConstraint
constraintWithItem:catchyLabelControl
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:_catchyMotoControl
attribute:NSLayoutAttributeCenterY
multiplier:1
constant:0]];
上面有很多在它的子视图,但你真的想看看一个是这一个:
[_redBackGround addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-bi-[spacerLine1(u)]-bi-|" options:0 metrics:metrics views:views]];
,我明确地声明滚动视图的水平宽度的限制这保留了整个滚动条日lViews宽度只要spacerLine1存在于它的子视图
此外,还有一两件事,这两个方法的上述使用苹果公司的技术说明这两种方法,我往往喜欢第二种方法比较好,但首先是需要对复杂动画,因为scrollview将作为contentView的一个调色板,其子视图可以被约束/更新/动画等等。另外,当我说你不需要混淆layoutSubviews时,我的意思是你不需要使用它来渲染scrollView,但是如果你打算在动画中使用,你显然还是需要调用layoutIfNeeded内容视图的子视图的约束。
你使用自动布局约束?当我的意思是使用它们时,你是否全力以赴使用它们?如果是这样,我有这个问题,并解决了它,但我需要知道是否/如何限制滚动视图 – Loxx
我正在编程生成一切。我使用故事板的唯一的东西就是segues。 – Aderis
完美无瑕,就像一位老板,你正通过互联网连接高级程序视图,无论如何,请先阅读本文,看看它是否有帮助:https://developer.apple.com/library/ios/technotes/tn2154/_index。 HTML我告诉你先使用它,因为我的方式可能不适合你,而且你更容易排除苹果破碎的UIScrollView可以做的和不能做的事情。使用自动布局或混合自动布局进行复杂视图编程时,UIScrollView几乎不可用。如果这不起作用,我会告诉你如何重新创建问题,实施苹果的修复和我自己的修复 – Loxx