UIScrollView - утрыманне згасае непазбежна пры прагортцы

Я дызайн Scrollview ў інтэрфейсе будаўніка, як гэта

enter image description here

Ён добра выглядае тут. Але, на жаль, калі я запусціць яго на эмулятары або прыладзе

яна становіцца

enter image description here

Утрыманне ў Scrollview з'яўляецца пашырэнне сябе па-за Scrollview і нават калі за межамі UIView, які змяшчае гэты Scrollview.

У маёй viewDidLoad (панэль з'яўляецца кантэйнерам Scrollview)

- (void)viewDidLoad
{
    [super viewDidLoad];
   //Do any additional setup after loading the view.
    CGFloat adjustPanelHeight = [PTTScreenScaleUtil getAdjustHeight:self.panel.frame.size.height];
    CGRect panelRect = self.panel.frame;
    panelRect.size.height = adjustPanelHeight;
    self.panel.frame = panelRect;

    UIImage *image = [UIImage imageNamed:@"panel-background"];
    UIGraphicsBeginImageContext(self.panel.frame.size);
    [image drawInRect:CGRectMake(0, 0, self.panel.frame.size.width, adjustPanelHeight)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self.panel setBackgroundColor:[UIColor colorWithPatternImage:newImage]];

    NSLog(@"scrollView Height : %f", self.scrollView.frame.size.height);
    NSLog(@"scrollView contentSize Height : %f", self.scrollView.contentSize.height);
//    CGRect scrollViewRect = self.scrollView.frame;
//    CGRect scrollViewContentRect = self.scrollView.frame;
//    NSLog(@"ScrollView Height Before : %f , After : %f", self.scrollView.frame.size.height, [PTTScreenScaleUtil getAdjustHeight:self.scrollView.frame.size.height]);
//    scrollViewRect.size.width = 280;
//    scrollViewRect.size.height = [PTTScreenScaleUtil getAdjustHeight:270];
//    self.scrollView.frame = scrollViewRect;
//    [self.detailsLabel sizeToFit];
    UIView *view = [[self.scrollView subviews] objectAtIndex:0];
//    [view sizeToFit];
//    [self.scrollView setContentMode:UIViewContentModeScaleAspectFit];
//    NSLog(@"ContentSize Height : %f", view.frame.size.height);
//    scrollViewContentRect.size.height = view.frame.size.height;
    NSLog(@"Bounds : %f", view.bounds.size.height);
    self.scrollView.frame = CGRectMake(10, 10, 280, 270);
    self.scrollView.contentSize = CGSizeMake(280, 500);
    NSLog(@"Frame Height %f", self.scrollView.frame.size.height);
    //[self.scrollView setContentSize: CGSizeMake(280, 1000)];

    CGRect termBtnRect = self.termBtn.frame;
    CGRect mailBtnRect = self.mailBtn.frame;
    CGRect twitterBtnRect = self.twitterBtn.frame;
    CGRect fbBtnRect = self.fbBtn.frame;
    termBtnRect.origin.y = adjustPanelHeight - 10 - termBtnRect.size.height;
    mailBtnRect.origin.y = adjustPanelHeight - 10 - termBtnRect.size.height;
    twitterBtnRect.origin.y = adjustPanelHeight - 10 - termBtnRect.size.height;
    fbBtnRect.origin.y = adjustPanelHeight - 10 - termBtnRect.size.height;
    self.termBtn.frame = termBtnRect;
    self.mailBtn.frame = mailBtnRect;
    self.twitterBtn.frame = twitterBtnRect;
    self.fbBtn.frame = fbBtnRect;
}

Усе часопіс вяртанне 270,0

PS. паласа пракруткі з'яўляецца правільным, нават калі ўтрыманне выходзіць за межы, але паласа пракруткі працуе правільна (знаходжанне ў раме Scrollview як арганізаваць у інтэрфейсе будаўніка) Я паняцця не маю, як я магу вырашыць гэтую праблему. Любы, дапамажыце мне, калі ласка.

Дзякуй.

4
Вы змяняючы рамку для Scrollview дзе-небудзь яшчэ ў вашым кодзе?
дададзена аўтар sangony, крыніца
Паспрабуйце стварыць і дадаўшы Scrollview праграмна, каб убачыць, калі вы атрымаеце тую ж праблему. Вы ведаеце, як зрабіць гэта?
дададзена аўтар sangony, крыніца
Паспрабуйце стварыць і дадаўшы Scrollview праграмна, каб убачыць, калі вы атрымаеце тую ж праблему. Вы ведаеце, як зрабіць гэта?
дададзена аўтар sangony, крыніца
ніякае змяненне памеру Scrollview (гэтая лінія self.scrollView.frame = CGRectMake (10, 10, 280, 270), я проста не даюць такое ж значэнне, як я ўсталяваць Scrollview ў памерах інспектара). Усе гэтыя adjustHeight для iPhone5. Ніжэй iPhone5, яна вяртае тое ж значэнне.
дададзена аўтар SaintTail, крыніца
ніякае змяненне памеру Scrollview (гэтая лінія self.scrollView.frame = CGRectMake (10, 10, 280, 270), я проста не даюць такое ж значэнне, як я ўсталяваць Scrollview ў памерах інспектара). Усе гэтыя adjustHeight для iPhone5. Ніжэй iPhone5, яна вяртае тое ж значэнне.
дададзена аўтар SaintTail, крыніца

8 адказы

Вырашыць яго шляхам стварэння новага кантролера віду ў інтэрфейсе будаўніка і паўтарыць той жа працэс з асцярожным і лато. Гэта працуе.

Калі я параўноўваю абодва кантролера два выгляду я разумею, што няправільна адзін UIScrollView кліп падвіды зняты. Калі праверыць гэта праблема вырашыць.

13
дададзена
Дзякуй за правільны адказ чувак ...
дададзена аўтар guru, крыніца
Мабыць ўстаноўка кліпа падвідаў на UIScrollView робіць трук. Дзякуй за адказ.
дададзена аўтар Nirav, крыніца

Вырашыць яго шляхам стварэння новага кантролера віду ў інтэрфейсе будаўніка і паўтарыць той жа працэс з асцярожным і лато. Гэта працуе.

Калі я параўноўваю абодва кантролера два выгляду я разумею, што няправільна адзін UIScrollView кліп падвіды зняты. Калі праверыць гэта праблема вырашыць.

13
дададзена
Дзякуй за правільны адказ чувак ...
дададзена аўтар guru, крыніца
Мабыць ўстаноўка кліпа падвідаў на UIScrollView робіць трук. Дзякуй за адказ.
дададзена аўтар Nirav, крыніца

Я проста змагаўся з гэтым на працягу гадзіны і меў галава прысмак моманту.

У маім выпадку, у мяне быў UIView на сцэне ў раскадроўкі. У нейкі момант я вырашыў, што мне гэта было патрэбна, каб быць UIScrollView замест (у адрозненне ад першапачатковага плана, які павінен быў ўстаўляць UIScrollView у UIView )

Я пайшоў наперад і змяніў клас па UIView у UIScrollView . IB змяніў яго Scroll View ў схеме дакумента, я мяркую, я добра, праўда?

А потым я бачу паводзіны, якое вы апісалі.

У нейкі момант яна дзівіць мяне, што гэта не дастаткова. Відавочна, даданне UIScrollView праз IB робіць некаторыя рэчы па-іншаму, чым даданне UIView і проста змяніць клас не дастаткова. І гэта, верагодна, прычына паўторна рабіць гэта з нуля ўсталяваў яе для вас.

So for anyone who runs into this in the future, make sure you added the UIScrollView via IB instead of a UIView

1
дададзена

Я проста змагаўся з гэтым на працягу гадзіны і меў галава прысмак моманту.

У маім выпадку, у мяне быў UIView на сцэне ў раскадроўкі. У нейкі момант я вырашыў, што мне гэта было патрэбна, каб быць UIScrollView замест (у адрозненне ад першапачатковага плана, які павінен быў ўстаўляць UIScrollView у UIView )

Я пайшоў наперад і змяніў клас па UIView у UIScrollView . IB змяніў яго Scroll View ў схеме дакумента, я мяркую, я добра, праўда?

А потым я бачу паводзіны, якое вы апісалі.

У нейкі момант яна дзівіць мяне, што гэта не дастаткова. Відавочна, даданне UIScrollView праз IB робіць некаторыя рэчы па-іншаму, чым даданне UIView і проста змяніць клас не дастаткова. І гэта, верагодна, прычына паўторна рабіць гэта з нуля ўсталяваў яе для вас.

So for anyone who runs into this in the future, make sure you added the UIScrollView via IB instead of a UIView

1
дададзена

У мяне была тая ж праблема, як апісана ў гэтым артыкуле. Я паспрабаваў некалькі камбінацый рашэнняў, якія не працуюць, у тым ліку:

    <�Літый> змяшчаючы выгляд пракруткі ўнутры гледжання з заціскам, каб Bounds = ТАК
  • пакласці выгляд ўнутры віду пракруткі з заціскам да Bounds = YES, што ўтрымліваецца тады мой погляд дзіцяці
  • пакласці кантэйнер View ўнутры віду пракруткі, а затым ўкладанне майго падвіда
  • аднаўленне файлаў Interface Builder цалкам
  • кожная камбінацыя Autosizing варыянтаў маскі systematcially як для прадстаўлення пракруткі і віду кантэйнера
  • кліп межаў ўключыць або адключыць для кожнага асобнага элемента сістэматычна

Выгляд дзіцяці ў пытанні раней працаваў у мэтах пракруткі, але не было б у гэтым адным выпадку, калі ўтрыманне падзьмуў за межы ўяўлення прагорткі.

У рэшце рэшт, я рэалізаваў рашэнне ў кодзе, як я не мог знайсці спосаб атрымаць Interface Builder супрацоўнічаць:

// There are two scroll areas on the screen, the left view and the right view.
// We want the right view to contain a scrollable area with another child view controller
// we designed in Interface Builder.

// create a scroll view to fill the right view with a scrollable area
CGSize rightFrameSize = self.rightView.bounds.size;
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake (0, 0, rightFrameSize.width, rightFrameSize.height)];
scrollView.contentSize = CGSizeMake(640, 1352);
[self.rightView addSubview:scrollView];

// now create our child view controller from Interface Builder and add it to the scroll view
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"CustomerAddress" bundle:[NSBundle mainBundle]];
detailsView = [sb instantiateViewControllerWithIdentifier:@"CustomerDetailsView"];
detailsView.delegate = self;
detailsView.customer = _customer;
[scrollView addSubview:detailsView.view];

Вы маглі б, вядома, атрымаць scrollView.contentSize ад кантролера гледжання дзіцяці вы сканструяваны ў Interface Builder, выкарыстоўваючы scrollView.contentSize = detailsView.view.frame.size .

У мяне ёсць любоў/нянавісць адносіны з Interface Builder ... большасць дзён я люблю яго, але праз некалькі дзён мы спрачаемся, і я жадаю, каб мы ніколі не сустракаліся ... :)

0
дададзена

У мяне была тая ж праблема, як апісана ў гэтым артыкуле. Я паспрабаваў некалькі камбінацый рашэнняў, якія не працуюць, у тым ліку:

    <�Літый> змяшчаючы выгляд пракруткі ўнутры гледжання з заціскам, каб Bounds = ТАК
  • пакласці выгляд ўнутры віду пракруткі з заціскам да Bounds = YES, што ўтрымліваецца тады мой погляд дзіцяці
  • пакласці кантэйнер View ўнутры віду пракруткі, а затым ўкладанне майго падвіда
  • аднаўленне файлаў Interface Builder цалкам
  • кожная камбінацыя Autosizing варыянтаў маскі systematcially як для прадстаўлення пракруткі і віду кантэйнера
  • кліп межаў ўключыць або адключыць для кожнага асобнага элемента сістэматычна

Выгляд дзіцяці ў пытанні раней працаваў у мэтах пракруткі, але не было б у гэтым адным выпадку, калі ўтрыманне падзьмуў за межы ўяўлення прагорткі.

У рэшце рэшт, я рэалізаваў рашэнне ў кодзе, як я не мог знайсці спосаб атрымаць Interface Builder супрацоўнічаць:

// There are two scroll areas on the screen, the left view and the right view.
// We want the right view to contain a scrollable area with another child view controller
// we designed in Interface Builder.

// create a scroll view to fill the right view with a scrollable area
CGSize rightFrameSize = self.rightView.bounds.size;
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake (0, 0, rightFrameSize.width, rightFrameSize.height)];
scrollView.contentSize = CGSizeMake(640, 1352);
[self.rightView addSubview:scrollView];

// now create our child view controller from Interface Builder and add it to the scroll view
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"CustomerAddress" bundle:[NSBundle mainBundle]];
detailsView = [sb instantiateViewControllerWithIdentifier:@"CustomerDetailsView"];
detailsView.delegate = self;
detailsView.customer = _customer;
[scrollView addSubview:detailsView.view];

Вы маглі б, вядома, атрымаць scrollView.contentSize ад кантролера гледжання дзіцяці вы сканструяваны ў Interface Builder, выкарыстоўваючы scrollView.contentSize = detailsView.view.frame.size .

У мяне ёсць любоў/нянавісць адносіны з Interface Builder ... большасць дзён я люблю яго, але праз некалькі дзён мы спрачаемся, і я жадаю, каб мы ніколі не сустракаліся ... :)

0
дададзена

толькі зрабіць cliptobound = YES ў раскадровку, калі вы змянілі UIView з UIScrollView

0
дададзена

толькі зрабіць cliptobound = YES ў раскадровку, калі вы змянілі UIView з UIScrollView

0
дададзена