[英]UIScrollView not scrolling when add constrains for UIPageControl in iOS
我有1個UIPageControl
和1個UIScrollView
。 當我為UIPageControl
設置約束時,我的UIScrollView
無法滾動。 這是我的代碼:
//set contentsize for uiscrollview
[self.scrollView setContentSize:CGSizeMake(320, 1440)];
UIPageControl *imagePVControl = self.imagePVControl;
[imagePVControl setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[imagePVControl]-0-|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(imagePVControl)]];
當我使用[imagePVControl setTranslatesAutoresizingMaskIntoConstraints:NO];
scrollview無法滾動 ,但是如果我使用[imagePVControl setTranslatesAutoresizingMaskIntoConstraints:YES];
,我的scrollview可以srcoll 。 您能幫我解決此問題嗎? 謝謝。
另外,我的XIB取消選中“使用自動布局”。
UPDATE
我將代碼更改如下。 UIScrollview
可以滾動,但UIPageControl
在中心而不是在左側對齊。 我想在左邊添加UIPageControl
,但它不成功。 請幫助我糾正它。 謝謝
NSDictionary *views = @{@"ScrollImageView":self.scrollViewImage,@"TableView":self.productDetailTable,@"InfoView":self.infoView};
NSDictionary *metrics = @{ @"ScrollImageheight" : ScrollImage_height,@"Tablewidth" : width, @"Tableheight" : Table_height,@"infoViewheight" : InfoView_height,@"infoViewWidth" : InfoView_width};
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[TableView(Tablewidth)]-0-|" options:0 metrics:metrics views:views]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[InfoView(infoViewWidth)]-0-|" options:0 metrics:metrics views:views]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[ScrollImageView(ScrollImageheight)]-0-[InfoView(infoViewheight)]-0-[TableView(Tableheight)]-|" options:0 metrics:metrics views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[imagePVControl]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(imagePVControl)]];
我還在UIScrollView中的約束方面苦苦掙扎。 我最近了解到的是,一旦將TranslatesAutoresizingMaskIntoConstraints
設置為NO,您將丟失很多設置。 像contentSize
和UIScrollView
內部的視圖框架一樣,這很奇怪。 我了解到的是,如果要向UIScrollView
內的視圖添加約束,則必須設置其whosViews的所有內容。 對於您的情況,我認為您應該嘗試以下方式:[self.view addConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@“ H:| -10- [imagePVControl(320)]-0- |”,選項:0,指標:無,的觀點:NSDictionaryOfVariableBindings(imagePVControl)]]; [self.view addConstraints:[NSLayoutConstraintconstraintsWithVisualFormat:@“ V:| -10- [imagePVControl(1440)]-0- |”,options:0,metrics:nil,views:NSDictionaryOfVariableBindings(imagePVControl)]]; 在這兩個約束中,我指定了上,下,左和右,此外,我還設置了imagePVControl
的寬度和高度。原因是,一旦將TranslatesAutoresizingMaskIntoConstraints
設置為NO,就會告訴計算機您我們將告訴它contentSize
大小,而不是設置contentSize
,而是告訴它內容內部視圖的所有信息。 這里的主要區別是UIScrollView
周圍沒有固定的邊緣,因此不能像其他類型的UIView
一樣設置約束。
您可以從中學到以下知識: https : //developer.apple.com/library/ios/technotes/tn2154/_index.html希望獲得幫助:)
復查此問題后,我發現了問題。 使用UIPageControl
的方式是正確的,您應該在此處添加更多代碼。 我假設您在滾動視圖的頂部有一個名為myView的UIView
,然后在myView之下有一個名為myTable的UITableView
。 您想要設置myView 240高度和myTable 1200高度。 然后是以下代碼:
NSDictionary *viewsDic = NSDictionaryOfVariableBindings(myView, myTable);
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myView(320)]-|", options:0, metrics:nil, views:viewDic]];
[self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[myTable(320)]-|", options:0, metrics:nil, views:viewDic]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[myView(240)]-[myTable(1200)]-|", options:0, metrics:nil, views:viewDic]];
主要原因是您將scrollView TranslatesAutoresizingMaskIntoConstraints
的子視圖設置為NO,這將導致無法手動設置contentSize。 因此,我給出了scrollView的內容大小,它會自動計算contentSize。
為什么要使用約束? 為什么不能在UIScrollView
上設置setPagingEnabled:YES
,然后將UIPageControl
放在層次結構中的UIScrollView
頂部?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.