关于使用第三方库masonry的代码实例

本文通过纯代码方式并引用第三方库Masonry实现了一个微博界面案例。文中详细介绍了使用自动布局时需要注意的问题,例如避免为Label设置固定宽高,以及如何进行正确的约束设置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用自动布局纯代码的方式,并且引用第三方库写了一个微博界面的案例,其中的每个约束之间都是相互联

系的,例如label 和 text 不能设置宽度和高度的具体数值,一旦固定下来,可能会出现错误,例如不会

换行,文字显示不全等等一些列问题,

 

一个技巧,手动布局时,最好从一侧开始进行约束,一般推荐上面和左侧,进行约束,约束时,一定要找一个

固定的控件进行参考,在执行约束,否则,因为优先级的缘故,可能被优先级高的一方拽走,这里是要注意的

地方,下面是截取的一段实例进行了简要的说明,也对自动布局的理解做了如上浅谈。。。

 

 

#import "XDWeiBoViewCell.h"

#import "Masonry.h"

 

 

@interface XDWeiBoViewCell ()

 

@property (nonatomic, weak)UIImageView *iconImage;

@property (nonatomic, weak)UILabel *nameLabel;

@property (nonatomic, weak)UILabel *txtLabel;

@property (nonatomic, weak)UIImageView *picImage;

@property (nonatomic, weak)UIImageView *vipImage;

 

@end

 

@implementation XDWeiBoViewCell

 

+(instancetype)weiboCellWithTableView:(UITableView *)tableView

{

    

 

    NSString *ID = @"weibo";

    XDWeiBoViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];

    if (cell == nil) {

        cell = [[XDWeiBoViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];

    }

    

    return cell;

    

}

 

 

 

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

{

    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {

        

      

        UIImageView *iconImage = [[UIImageView alloc] init];

        UIImageView *picImage = [[UIImageView alloc] init];

        UIImageView *vipImage = [[UIImageView alloc] init];

        UILabel *nameLabel = [[UILabel alloc] init];

        UILabel *txtLabel = [[UILabel alloc] init];

        

        self.iconImage = iconImage;

        self.picImage = picImage;

        self.nameLabel = nameLabel;

        self.txtLabel = txtLabel;

        self.vipImage = vipImage;

        

        [self.contentView addSubview:iconImage];

        [self.contentView addSubview:picImage];

        [self.contentView addSubview:vipImage];

        [self.contentView addSubview:nameLabel];

        [self.contentView addSubview:txtLabel];

        

        self.nameLabel.numberOfLines = 1;

        self.txtLabel.numberOfLines  = 0;

        self.nameLabel.font = [UIFont systemFontOfSize:15];

        self.txtLabel.font  = [UIFont systemFontOfSize:13];

        

 

        

//        if (self.contentView.constraints) {

//            self.didSetUpConstraints = YES;

//        }else{

//            self.didSetUpConstraints = NO;

//        }

        

    

    

  }

    return self;

}

 

-(void)setWeiboData:(XDWeibo *)weiboData

{

   

    

    

    

    

    

    _weiboData = weiboData;

    

    self.iconImage.image = [UIImage imageNamed:weiboData.icon];

    self.txtLabel.text = weiboData.text;

    self.nameLabel.text = weiboData.name;

    if (weiboData.isVip) {

        self.vipImage.hidden = NO;

        self.vipImage.image = [UIImage imageNamed:@"vip"];

    }else{

        self.vipImage.hidden = YES;

    }

    if (weiboData.picture) {

        

        self.picImage.hidden = NO;

        self.picImage.image = [UIImage imageNamed:weiboData.picture];

    }else{

        self.picImage.hidden = YES;

        self.picImage = nil;

    }

    

    

    

  

    

    

        [self.iconImage mas_makeConstraints:^(MASConstraintMaker *make) {

            make.left.equalTo(self.contentView.mas_left).with.mas_offset(8);

            make.top.equalTo(self.contentView.mas_top).with.mas_offset(8);

            make.width.mas_equalTo(40);

            make.height.mas_equalTo(40);

        }];

        [self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {

            make.left.equalTo(self.iconImage.mas_right).with.mas_offset(8);

            make.centerY.equalTo(self.iconImage.mas_centerY);

        }];

        [self.vipImage mas_makeConstraints:^(MASConstraintMaker *make) {

            make.centerY.equalTo(self.iconImage.mas_centerY);

            make.left.equalTo(self.nameLabel.mas_right).with.mas_offset(8);

            make.width.mas_equalTo(10);

            make.height.mas_equalTo(10);

        }];

        [self.txtLabel mas_makeConstraints:^(MASConstraintMaker *make) {

            make.top.equalTo(self.iconImage.mas_bottom).with.mas_offset(8);

            make.left.equalTo(self.contentView.mas_left).with.mas_offset(8);

            make.right.equalTo(self.contentView.mas_right).with.mas_offset(-8);

        }];

        if (weiboData.picture) {

            [self.picImage mas_makeConstraints:^(MASConstraintMaker *make) {

                make.top.equalTo(self.txtLabel.mas_bottom).with.mas_offset(8);

                make.left.equalTo(self.contentView.mas_left).with.mas_offset(8);

                make.height.equalTo(self.picImage.mas_width);

                make.bottom.equalTo(self.contentView.mas_bottom).with.mas_offset(-8);

                make.width.mas_equalTo(80);

            }];

        }else{

            [self.txtLabel mas_makeConstraints:^(MASConstraintMaker *make) {

                make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-8);

            }];

        }

    

   

    

    

    

    [self.contentView setNeedsLayout];

    [self.contentView layoutIfNeeded];

    [self.contentView setNeedsUpdateConstraints];

    [self.contentView updateConstraintsIfNeeded];

}

 

- (void)layoutSubviews

{

    [super layoutSubviews];

}

 

@end

 

转载于:https://www.cnblogs.com/xdios/p/4499202.html

内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值