.frame之间调用 ios_ios self.view.frame - CSDN
精华内容
参与话题
  • [iOS KVO监控view的frame变化]

    千次阅读 2019-09-09 11:12:50
    //记录一下通过添加KVO 对self:UIView 的frame属性进行监控,一旦frame变换 则发送通知调用需要的方法- (instancetype)initWithConfig:(SDPopViewConfig *)config { self = [super init]; if (self) { // kvo ...

    ================

    手残把 @wokenshin 兄弟的回复给删除了… 不知道怎么撤销,

    // 这里补充下, @wokenshin兄弟用Masonry修改约束后, 发现不能触发监听, 我这里也同样是该问题, 这里通过约束后再次设置_t.frame的方式, 可以出发该监听, 个人猜测监听动作是在set frame的时候才会触发. 而Masonry仅仅是修改了约束,layout...
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the
        
        _t = [[TestView alloc] initWithNone];
        _t.frame = CGRectMake(10, 10, 100, 100);
        _t.backgroundColor = [[UIColor alloc] initWithRed:210/255 green:210/255 blue:21/255 alpha:1];
        [self.view addSubview:_t];
    
        
    }
    
    -(void)viewDidAppear:(BOOL)animated{
        NSLog(@"==> %f",_t.frame.origin.x);
    
    }
    
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
        
    //    _t.frame = CGRectMake(100, 10, 90, 100);
        [_t mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.view).with.offset(99);
            make.top.equalTo(self.view).with.offset(111);
            make.center.equalTo(self.view).with.centerOffset(CGPointMake(10, 10));
        }];
        [self.view layoutIfNeeded];
        _t.frame = CGRectMake(_t.frame.origin.x, _t.frame.origin.y, _t.frame.size.width, _t.frame.size.height);
        NSLog(@"==> %f",_t.frame.origin.x);
    
    } 
    

    ================

    //记录一下
    ##通过添加KVO 对self:UIView 的frame属性进行监控,一旦frame变换 则发送通知调用需要的方法

    - (instancetype)initWithConfig:(SDPopViewConfig *)config
    {
        self = [super init];
        if (self) {
            // kvo 监控自己的 frame 属性变化
            [self addObserver:self forKeyPath:@"frame" options:0 context:NULL];
            _config = config;
        }
        return self;
    }
    
    
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
        if([keyPath isEqualToString:@"frame"]) {
            CGRect newFrame = CGRectNull;
            if([object valueForKeyPath:keyPath] != [NSNull null]) {
            //此处为获取新的frame
                newFrame = [[object valueForKeyPath:keyPath] CGRectValue];
                //此处为调用的方法
                [self setLayerFrame:newFrame];
                
            }
        }
    }
    
    展开全文
  • layoutSubviews在以下情况下会被调用: 1、init初始化不会触发layoutSubviews  但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发 2、addSubview会触发layoutSubviews 3、...

    layoutSubviews在以下情况下会被调用:

    1、init初始化不会触发layoutSubviews

       但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发

    2、addSubview会触发layoutSubviews

    3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化

    4、滚动一个UIScrollView会触发layoutSubviews

    5、旋转Screen会触发父UIView上的layoutSubviews事件

    6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件



    但是这里注意的是: 1. 如果是在initWithFrame方法里 初始化了button或者ScrollView (注意:这里是可以改变多种状态的:例如按钮是点击和不点击, scrollView是滚动和不滚动)

    这时候 layoutSubViews 会调用多次. (经过试验证明)



    建议: 不要在LayoutSubViews 方法里写 初始化视图的代码  只允许在里面进行改变布局

    展开全文
  • 如果你不想自定义Cell,又希望改变accessoryView的位置的话,很简单,在子Cell类中的layoutSubviews方法中去修改accessoryView的frame。(别忘了调用[super layoutSubviews])- (void)layoutSubviews { [super ...

    如果你不想自定义Cell,又希望改变accessoryView的位置的话,很简单,在子Cell类中的layoutSubviews方法中去修改accessoryViewframe。(别忘了调用[super layoutSubviews])

    - (void)layoutSubviews
    {
        [super layoutSubviews];
    
        CGRect adjustedFrame = self.accessoryView.frame;
        adjustedFrame.origin.x += 10.0f;
        self.accessoryView.frame = adjustedFrame;
    }

    直接在别的位置修改是没有效果的!~


    如果不希望子类化Cell,还有个“作假”的办法,就是把accessoryView里面塞进去的view宽度变大,然后调整对内对齐方式。

    static CGFloat const kRightOffset = 10.0;
    
    cell.accessoryView = ({UIImageView * imgV = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image.png"]];
                    CGRect frame = imgV.frame;
                    frame.size.width = frame.size.width + kRightOffset;
                    imgV.frame = frame;
                    [imgV setContentMode:UIViewContentModeLeft];
                    imgV; });

    该方法是我试验是能够得到效果是往左移,往右移的办不到(估计默认给cell.accessoryView加了右边的margin

    这里写图片描述


    References : Can a standard accessory view be in a different position within a uitableviewcell? – Stack Overflow

    How to override accessoryView in UITableViewCell to change it’s position – Stack Overflow

    展开全文
  • iOS Masonry布局获取Frame

    千次阅读 2017-09-28 16:11:12
    方法1 [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0...// 先调用superView的layoutIfNeeded方法再获取frame [self.view layoutIfNeede

    方法1

    
    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0));
    }];
    // 先调用superView的layoutIfNeeded方法再获取frame
    [self.view layoutIfNeeded];
    NSLog(@"%@", self.scrollView);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    打印结果

    <UIScrollView: 0x7fc72d016000; frame = (0 0; 375 667);
    • 1

    方法2

    [self.scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0));
    }];
    // 0.1秒后获取frame, 设置为0秒也可以获取,具体参考链接
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"%@", self.scrollView);
    });
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    打印结果

    <UIScrollView: 0x7fc72d016000; frame = (0 0; 375 667);
    展开全文
  • 在写代码的时候我们如果用frame进行布局的话,经常会用到像self.view.frame.size.width这样的语句来获取我们想要的位置或者大小的值,这个语句调用的时候很繁杂,下面是我封装的一个类,很简洁的代码就可拿到自己想...
  • 最近做一个ios项目,里面涉及了google地图,flutter也有控件显示google地图,但是这些插件并不能在地图上绘制形状和线条,本人安卓屌丝一枚,不会用oc或者swift开发原生项目,不过我会flutter,swift还和kotlin有点...
  • iOS 7、iOS 8屏幕适配

    万次阅读 2015-05-11 17:31:07
    iOS 8中,[UIScreen bounds] 、[UIScreen applicationFrame] 、Status bar、Keyboard这些frame都是根据设备真实方向来返回frame的,而在iOS 7中,不过是横屏还是竖屏,iOS总是返回竖屏的frame
  • iOS开发中如何在创建ViewController时一起创建了Xib文件,这时我们在ViewDidLoad设置frame时 会出现获取到的view.frame是错误的,原因是: 调用方法viewDidLoad中,所有的控件的frame都是在当前storyboard中状态,...
  • IOS 使用XIB 自定义View

    万次阅读 2012-10-31 10:25:06
    一般自定义View 代码方式 有  在初始化的时候添加 子Views ...- (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { // add subviews } return self; } 还有种 是自
  • UIViewController的frame改变大小

    千次阅读 2013-11-06 17:35:16
    UIViewController的frame改变大小 分类: IOS转载博客2013-11-03 17:06 18人阅读 评论(0) 收藏 举报 uiviewcontrollerios开发 项目开发的时候遇到一个问题,有一个controller的view无论在viewdidload...
  • 设置约束后 如何获取正确的frame

    千次阅读 2018-02-09 17:34:43
    1、任何原因引起View的尺寸被改变2、调用ViewController的“viewWillLayoutSubviews”方法3、未启用Autolayout情况,调用“layoutSubviews”4、启用Autolayout情况,调用ViewController的"...
  • layoutSubviews 和 layoutIfNeeded…

    千次阅读 2013-09-10 20:31:26
    layoutSubviews在以下情况下会被调用: 2、addSubview会触发layoutSubviews 3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 4、滚动一个UIScrollView会触发layoutSubviews 5、旋转...
  • iOS与JS交互的4种方法

    万次阅读 2018-06-13 09:29:41
    iOS与JS交互的方法:1.拦截url(适用于UIWebView和WKWebView) 2.JavaScriptCore(只适用于UIWebView,iOS7+) 3.WKScriptMessageHandler(只适用于WKWebView,iOS8+) 4.WebViewJavascriptBridge(适用于...
  • 在.h文件声明 -(UIButton *)addImagebutton:(NSString *)imageName withCGRect:(CGRect)frame; 方法之后 这个方法是实现直接添加一个按钮图片 在 .m 文件里面实现 为什么合理要有返回值呢?在后面添加方法
  • 一.UIScrollView显示或者隐藏滚动条, 默认有两个属性 @property(nonatomic) BOOL showsHorizontalScrollIndicator; // default YES. show indicator while we are tracking. fades out after trac
  • Flutter UiKitView 嵌入iOS原生View

    千次阅读 2020-09-23 21:05:47
    本文详细描述 flutter 中嵌套使用ios原生组件
  • 视图旋转只影响视图本身以及子视图的视觉效果,视图旋转改变了其在父视图中的位置但并未改变自身尺寸,也没有改变子视图在其坐标系的位置,另外该旋转是围绕center为中心进行的,so 只有旋转的视图自身frame发生改变...
  • 参考:http://blog.csdn.net/iOSTianNan/article/details/53994935 ===参考:... 一,viewWillLayoutSubviews和viewDidLayoutSubviews都是控制器的自带的view的系统方法,如果是在控...
  • unity 3d与ios代码相互调用

    万次阅读 2018-03-12 21:53:48
    看unity3d两天了,一直想知道如何能让unity中添加ios的ui,苦于不知道两者直接如何相互调用,今天查文档时发现其实不是很难。unity给出了相关的例子:Bonjour Browser Sample1,Building an Application with a ...
1 2 3 4 5 ... 20
收藏数 37,770
精华内容 15,108
关键字:

.frame之间调用 ios