久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何以編程方式在 UIScrollView 中使用 AutoLayout 設置

How to set subviews with AutoLayout in UIScrollView programmatically?(如何以編程方式在 UIScrollView 中使用 AutoLayout 設置子視圖?)
本文介紹了如何以編程方式在 UIScrollView 中使用 AutoLayout 設置子視圖?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在使用自動布局以編程方式創建帶有 UiScrollview 和 UIPagectontrol 的應用程序,用于

I am creating app with UiScrollview and UIPagectontrol using Autolayout Programmatically, for

我已經創建了 TKScroller 作為 UIView 的子類,我使用 Some Mode 和 Array 對其進行初始化.

I have Created TKScroller as subclass of UIView, I am init it using Some Mode and Array.

TKScroller.m

TKScroller.m

-(void)setData{

[self layoutIfNeeded];
CGRect mainFrame=self.frame;


[self layoutIfNeeded];
CGRect mainFrame=self.frame;
UIView *lastview;
NSMutableArray* manualConstraints = [NSMutableArray array];

for (int i=0; i<arrayData.count ; i++)
{
    CGRect frame;
    frame.origin.x = scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = scrollView.frame.size;

    UIView *subview = [UIView new];

    subview.backgroundColor = [self getRandomColor];
    [scrollView addSubview:subview];

    if (i==0)
    {

        NSLayoutConstraint* b1_top = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:5];
        [manualConstraints addObject:b1_top];

        NSLayoutConstraint* b1_left = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeLeading multiplier:1 constant:5];
        [manualConstraints addObject:b1_left];

        NSLayoutConstraint* b1_right = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTrailing multiplier:1 constant:-5];
        [manualConstraints addObject:b1_right];
        NSLayoutConstraint* b1_bottom = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:-10];
        [manualConstraints addObject:b1_bottom];

        [subview layoutIfNeeded];
        [scrollView addConstraints:manualConstraints];
        lastview=subview;
    }
    else{

        NSLayoutConstraint* b1_top = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:5];
        [manualConstraints addObject:b1_top];

        NSLayoutConstraint* b1_left = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:lastview attribute:NSLayoutAttributeLeading multiplier:1 constant:5];
        [manualConstraints addObject:b1_left];

        NSLayoutConstraint* b1_right = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTrailing multiplier:1 constant:-5];
        [manualConstraints addObject:b1_right];
        NSLayoutConstraint* b1_bottom = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:-10];
        [manualConstraints addObject:b1_bottom];

        [subview layoutIfNeeded];
        [scrollView addConstraints:manualConstraints];
        lastview=subview;

    }
}

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * arrayData.count, mainFrame.size.height/2);

self.pageControl.currentPage = 0;
self.pageControl.numberOfPages = arrayData.count;

 pageControlBeingUsed = NO;
}

-(UIColor *)getRandomColor{
    int r = arc4random() % 255;
    int g = arc4random() % 255;
    int b = arc4random() % 255;
    return [UIColor colorWithRed:(r/255.0) green:(g/255.0) blue:(b/255.0) alpha:1.0];
}

現在我正在獲取任何子視圖,

Right now i am getting any subviews,

但是如果我改變方向它會給出不正確的結果,那么我怎樣才能為滾動視圖的子視圖提供 NSLayoutConstraint 呢?

but if i change orientation it will give incorrect result, So how can i give NSLayoutConstraint for subviews of scrollview ?

編輯

添加 NSLayoutConstraint 后,子視圖不顯示.我只是缺少一些約束,請在動態設置約束時糾正我.

After adding NSLayoutConstraint subviews are not shown. I am just missing some constraint , please correct me in setting constraints dynamically.

我的源代碼在這里,請幫幫我.謝謝你.抱歉語法不好.

My Source Code is here , Please Help Me. Thank you. And Sorry for bad grammar.

推薦答案

Here is a SO answer 解釋了如何使用自動布局做到這一點,他已經完美地解釋了,這里有垂直文本字段,但在你的情況下,你必須設置水平視圖約束.

Here is a SO answer has explained how to do this with auto layout, he has explain perfectly , In here there is vertically textfields are there But in your case it is you have to set Horizontal views constraints.

替代方案

設置約束你可以只設置子視圖的框架并在滾動視圖中設置它,并且基于方向你可以改變滾動視圖的子視圖的框架.

Rather that setting constraints you can set just frame of the subview and set it in Scrollview, And based on orientation you can change frames of the scrolview's subviews.

你的 setData 方法比如,

Your setData Method like,

-(void)setData{

    [self layoutIfNeeded];
    CGRect mainFrame=scrollView.frame;
    CGRect frame;
    for (int i=0; i<arrayData.count ; i++)
    {
        CGRect frame;
        frame.origin.x = scrollView.frame.size.width * i;
        frame.origin.y = 0;
        frame.size = scrollView.frame.size;

        frame.origin=CGPointMake(0, 0);
        UIView *subview = [[UIView alloc]initWithFrame:frame];
        subview.backgroundColor = [self getRandomColor];
        [scrollView addSubview:subview];
    }
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * arrayData.count, mainFrame.size.height/2);
}

現在你使用 NSNotificationCenter 可以在設備方向改變時得到通知,所以在它的這個選擇器方法中調用你的 setData 方法,

Now you using NSNotificationCenter you can get notify when device orientation chaged, so in this selector method of it call your setData method,

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(setData)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];

現在在您的 setData 方法中,您需要刪除所有子視圖,因為當設備更改方向時,它將向您的滾動視圖添加新視圖,因此在設置其框架之前從 Scrollview 中刪除所有子視圖,

Now in you setData method you need remove all subviews because when device changes Orientation it will add new views to your scrollview, so remove all subview from Scrollview before setting its frame,

        [scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

確保您正在從班級中移除觀察者,例如,

Make sure you are removing observer from your class like,

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

這篇關于如何以編程方式在 UIScrollView 中使用 AutoLayout 設置子視圖?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

how to set scrollview content size in swift 3.0(如何在 swift 3.0 中設置滾動視圖內容大小)
Stop a UITableView from automatically scrolling(阻止 UITableView 自動滾動)
iOS UIScrollView Lazy Loading(iOS UIScrollView 延遲加載)
using iOS 6.0 SDK and building for iOS 5 Target causes UIScrollView setMinimumZoomScale to fail when running on iOS 5 simulator(在 iOS 5 模擬器上運行時,使用 iOS 6.0 SDK 并為 iOS 5 Target 構建會導致 UIScrollView setMinimumZ
Create partial-screen UIPageViewController programmatically(以編程方式創建部分屏幕 UIPageViewController)
how to make an ImageView zoomable with or without ScrollView.?(如何使用或不使用 ScrollView 使 ImageView 可縮放?)
主站蜘蛛池模板: 久久久久久久久久影视 | 欧美精品一区二区三区四区五区 | 在线观看免费观看在线91 | 精品久久久久久久 | 91电影在线播放 | 亚洲欧美在线观看视频 | 777777777亚洲妇女 | 精品一区免费 | 一区二区三区国产在线观看 | 中文字幕日韩一区 | 欧美区日韩区 | 成人免费一区二区三区视频网站 | 亚洲444kkkk在线观看最新 | www.日韩 | 91av免费看 | 欧美在线国产精品 | 羞羞网站在线观看 | 久久久综合久久 | 久久久久久久久久久久久91 | 久久精品视频亚洲 | 在线视频一区二区三区 | 亚洲成人久久久 | 99精品欧美一区二区蜜桃免费 | 国产精品毛片 | 亚洲精品精品 | 麻豆91av | 91麻豆精品国产91久久久更新资源速度超快 | 涩爱av一区二区三区 | 欧美a在线 | 精品国产乱码久久久久久果冻传媒 | 久久久久九九九女人毛片 | 一区视频在线免费观看 | 亚洲91精品 | 天天插天天狠天天透 | 成人福利在线 | 三级在线视频 | 欧美一级视频在线观看 | 日韩欧美三级电影 | 久久精品欧美一区二区三区不卡 | 中文在线一区二区 | 精久久久久|