iOS 解決向UILabel文字最后插入N張圖片,支持向限制行數(shù)的UILabel 最后一行插入,多余文字顯示...

1崖咨、 效果



2饲窿、 ====直接上代碼吧===

// 判斷是否是ios7系統(tǒng)
#define kIsIOS7 [[[UIDevice currentDevice] systemVersion] floatValue] < 8.0
//
//  UILabel+StringFrame.h
//  QYER
//
//  Created by qyer on 15/3/19.
//  Copyright (c) 2015年 QYER. All rights reserved.
//

#import <UIKit/UIKit.h>

/**
 *  uilable 行間距高度
 */
static CGFloat const lineSapceHeight = 5.0f;

@interface UILabel (StringFrame)

#pragma mark - 獲取UILable Size

- (CGSize)boundingRectWithSize:(CGSize)size;
/**
 *  根據(jù)文字長度計(jì)算大小
 *
 *  @param content 文字長度
 *  @param pFont   文字字號
 *  @param pWidth  寬度
 *
 */
+(CGSize)getContentSize:(NSString *)content font:(UIFont *)pFont width:(CGFloat)pWidth;
/**
 *  根據(jù)文字長度計(jì)算大小
 *
 *  @param content 文字長度
 *  @param pFont   文字字號
 *  @param pHeight  高度
 *
 */
+(CGSize)getContentSize:(NSString *)content font:(UIFont *)pFont height:(CGFloat)pHeight;
/**
 *  根據(jù)文本獲取size ,有最大 寬高限制
 *
 *  @param string    文本
 *  @param maxWidth  最大寬
 *  @param maxHeight 最大高
 *  @param font      字體
 *  @param lineSpace 行間距(如果使用默認(rèn)的,就傳nil)
 *
 *  @return size
 */
+(CGSize)getContentSizeWithContentText:(NSString *)string andMaxWidth:(CGFloat)maxWidth andMaxHeight:(CGFloat)maxHeight AndFont:(UIFont*)font andLineSpacing:(NSNumber *)lineSpace;
/**
 *  根據(jù)文本獲取size ,有最大 寬高限制
 *
 *  @param string    文本
 *  @param maxWidth  最大寬
 *  @param maxHeight 最大高
 *  @param attribute 富文本屬性
 *
 *  @return size
 */
+(CGSize)getContentSizeWithContentText:(NSString *)string andMaxWidth:(CGFloat)maxWidth andMaxHeight:(CGFloat)maxHeight andAttributes:(NSDictionary *)attribute;


#pragma mark - 獲取UILable 每行顯示的文字

/**
 *  獲取lalbe 每行文字
 *
 *  @return 每行文字?jǐn)?shù)組
 */
- (NSArray *)getSeparatedLines;
/**
 *  獲取lalbe 每行文字
 *
 *  @param text 根據(jù)文字內(nèi)容
 *
 *  @return 每行文字?jǐn)?shù)組
 */
- (NSArray *)getSeparatedLinesWithText:(NSString*)text;
/**
 *  獲取lalbe 每行文字
 *
 *  @param content 文字內(nèi)容
 *  @param fonte   fonte description
 *  @param size    size description
 *
 *  @return return value description
 */
+(NSArray *)getSeparatedLinesWithText:(NSString*)content andFonte:(UIFont *)fonte andSize:(CGSize)size;


#pragma mark - 完美解決 向UILable 文字最后插入N張圖片,支持向限制行數(shù)的UILable 最后一行插入,多余文字顯示...

/**
 *  向文字末尾追加圖片,適用于已知Size的UILable
 *
 *  @param contentStr 文字內(nèi)容
 *  @param imgs       插入的圖片數(shù)組, 圖片最好帶間隔哦
 */
-(void)insertImgToContentLast:(NSString *)contentStr imgs:(NSArray *)imgs;
/**
 *  向文字末尾追加圖片,適用于AutoLayout 的UILable
 *
 *  @param contentStr    文字內(nèi)容
 *  @param imgs          插入的圖片數(shù)組, 圖片最好帶間隔哦
 *  @param estimateWidth 預(yù)估的UILable 最大寬度(已知的最大寬度)
 */
-(void)insertImgToContentLast:(NSString *)contentStr imgs:(NSArray *)imgs estimateWidth:(CGFloat)estimateWidth;
/**
 *  向已知文字后插入圖片
 *
 *  @param insertImgArr           insertImgArr description
 *  @param appendAttributedString 可為nil
 */
-(void)configTitleLableAttributedString:(NSArray *)insertImgArr AttributedString:(NSMutableAttributedString *)appendAttributedString;

@end
//
//  UILabel+StringFrame.m
//  QYER
//
//  Created by qyer on 15/3/19.
//  Copyright (c) 2015年 QYER. All rights reserved.
//

#import "UILabel+StringFrame.h"

#import <CoreText/CoreText.h>

@implementation UILabel (StringFrame)

#pragma mark - 獲取UILable Size

- (CGSize)boundingRectWithSize:(CGSize)size
{
    NSDictionary *attribute = @{NSFontAttributeName: self.font};
    
    CGSize retSize = [self.text boundingRectWithSize:size
                                             options:\
                      NSStringDrawingTruncatesLastVisibleLine |
                      NSStringDrawingUsesLineFragmentOrigin |
                      NSStringDrawingUsesFontLeading
                                          attributes:attribute
                                             context:nil].size;
    
    return retSize;
}

+(CGSize)getContentSize:(NSString *)content font:(UIFont *)pFont width:(CGFloat)pWidth{
    
    CGSize contentSize;
    if (kIsIOS7) {
        contentSize = [content boundingRectWithSize:CGSizeMake(pWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:pFont,NSFontAttributeName, nil] context:nil].size;
    }else{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        contentSize = [content sizeWithFont:pFont constrainedToSize:CGSizeMake(pWidth, MAXFLOAT) lineBreakMode:NSLineBreakByCharWrapping];
#pragma clang diagnostic pop

    }
    return contentSize;
}

+(CGSize)getContentSize:(NSString *)content font:(UIFont *)pFont height:(CGFloat)pHeight{
    
    CGSize contentSize;
    if (kIsIOS7) {
        contentSize = [content boundingRectWithSize:CGSizeMake(MAXFLOAT, pHeight) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:pFont,NSFontAttributeName, nil] context:nil].size;
    }else{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        contentSize = [content sizeWithFont:pFont constrainedToSize:CGSizeMake(MAXFLOAT, pHeight) lineBreakMode:NSLineBreakByCharWrapping];
#pragma clang diagnostic pop

    }
    return contentSize;
}

/**
*  根據(jù)文本獲取size ,有最大 寬高限制
*
*  @param string    文本
*  @param maxWidth  最大寬
*  @param maxHeight 最大高
*  @param attribute 富文本屬性
*
*  @return size
*/
+(CGSize)getContentSizeWithContentText:(NSString *)string andMaxWidth:(CGFloat)maxWidth andMaxHeight:(CGFloat)maxHeight  andAttributes:(NSDictionary *)attribute{
    CGSize size = CGSizeZero;
    if (IsEmpty(string)) {
        return size;
    }
    if (string) {
        if ([string respondsToSelector:
             @selector(boundingRectWithSize:options:attributes:context:)]) {
            size = [string boundingRectWithSize:CGSizeMake(maxWidth, maxHeight)
                                        options:NSStringDrawingUsesLineFragmentOrigin| NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesFontLeading
                                     attributes:attribute
                                        context:nil].size;
        }else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
            size = [string sizeWithFont:attribute[@"NSFontAttributeName"]
                      constrainedToSize:CGSizeMake(maxWidth, maxHeight)
                          lineBreakMode:NSLineBreakByCharWrapping];
#pragma clang diagnostic pop
        }
    }
    if (!CGSizeEqualToSize(CGSizeZero, size)) {
        
        CGFloat wight = maxWidth;
        CGFloat height = ceil(size.height);
        /**
         *  使用 NIAttributedLabel 有個(gè)bug ,當(dāng)文字只有一行或不滿一行 會出現(xiàn)文字顯示不出來
         */
        if (!attribute) {
            NSArray *rows = [UILabel getSeparatedLinesWithText:string  andFonte:attribute[NSFontAttributeName] andSize:size];
            if ([rows count]==1) {
                CGSize offsetSize = [UILabel getContentSize:string font:attribute[NSFontAttributeName] width:maxWidth];
                size = CGSizeMake(ceil(offsetSize.width) , ceil(offsetSize.height));
            }else{
                size = CGSizeMake(wight ,height);
            }
        }else {
            size = CGSizeMake(wight ,height);
        }
    }
    return size;
}


/**
 *  根據(jù)文本獲取size ,有最大 寬高限制
 *
 *  @param string    文本
 *  @param maxWidth  最大寬
 *  @param maxHeight 最大高
 *  @param font      字體
 *  @param lineSpace 行間距(如果使用默認(rèn)的,就傳nil)
 *
 *  @return size
 */
+(CGSize)getContentSizeWithContentText:(NSString *)string andMaxWidth:(CGFloat)maxWidth andMaxHeight:(CGFloat)maxHeight AndFont:(UIFont*)font andLineSpacing:(NSNumber *)lineSpace{
    CGSize size = CGSizeZero;
    if (IsEmpty(string)) {
        return size;
    }
    if (string && font) {
        if ([string respondsToSelector:
             @selector(boundingRectWithSize:options:attributes:context:)]) {
            NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
            paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
            paragraphStyle.alignment = NSTextAlignmentLeft;
            if (lineSpace) {
                paragraphStyle.lineSpacing = [lineSpace floatValue];
            }
            size = [string boundingRectWithSize:CGSizeMake(maxWidth, maxHeight)
                                        options:NSStringDrawingUsesLineFragmentOrigin| NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesFontLeading
                                     attributes:@{NSFontAttributeName:font,
                                                  NSParagraphStyleAttributeName:paragraphStyle}
                                        context:nil].size;
            
        }else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
            size = [string sizeWithFont:font
                      constrainedToSize:CGSizeMake(maxWidth, maxHeight)
                          lineBreakMode:NSLineBreakByCharWrapping];
#pragma clang diagnostic pop
        }
    }
    if (!CGSizeEqualToSize(CGSizeZero, size)) {
        
        CGFloat wight = ceil(maxWidth);
        CGFloat height = ceil(size.height );
        
        /**
         *  使用 NIAttributedLabel 有個(gè)bug ,當(dāng)文字只有一行或不滿一行 會出現(xiàn)文字顯示不出來
         */
        NSArray *rows = [UILabel getSeparatedLinesWithText:string  andFonte:font andSize:size];
        if ([rows count]==1) {
            CGSize offsetSize = [UILabel getContentSize:string font:font width:maxWidth];
            size = CGSizeMake(ceil(offsetSize.width) , ceil(offsetSize.height));
        }else{
            size = CGSizeMake(wight ,height);
        }
        
    }
    return size;
}

#pragma mark - 獲取UILable 每行顯示的文字

/**
 *  獲取lalbe 每行文字
 *
 *  @return 每行文字?jǐn)?shù)組
 */
- (NSArray *)getSeparatedLines {
    return [self getSeparatedLinesWithText:self.text];
}

/**
 *  獲取lalbe 每行文字
 *
 *  @param text 根據(jù)文字內(nèi)容
 *
 *  @return 每行文字?jǐn)?shù)組
 */
- (NSArray *)getSeparatedLinesWithText:(NSString*)text
{
    /**
     *  fix NSConcreteMutableAttributedString initWithString:: nil value
     */
    if (!(text && [text isKindOfClass:[NSString class]])) {
        return nil;
    }
    
    return [UILabel getSeparatedLinesWithText:text andFonte:[self font] andSize:[self frame].size];
}

/**
 *  獲取lalbe 每行文字
 *
 *  @param content 文字內(nèi)容
 *  @param fonte   fonte description
 *  @param size    size description
 *
 *  @return 每行文字?jǐn)?shù)組
 */
+(NSArray *)getSeparatedLinesWithText:(NSString*)content andFonte:(UIFont *)fonte andSize:(CGSize)size{
    if (!(content&&[content isKindOfClass:[NSString class]]) ||
        !(fonte&& [fonte isKindOfClass:[UIFont class]]) ||
        CGSizeEqualToSize(CGSizeZero, size)) {
        return nil;
    }
    NSString *text = content;
    UIFont   *font = fonte;
    CGRect    rect = CGRectMake(0, 0, size.width,size.height);
    
    CTFontRef myFont = CTFontCreateWithName((__bridge CFStringRef)([font fontName]), [font pointSize], NULL);
    NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] initWithString:text];
    [attStr addAttribute:(NSString *)kCTFontAttributeName value:(__bridge id)myFont range:NSMakeRange(0, attStr.length)];
    
    CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attStr);
    
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddRect(path, NULL, CGRectMake(0,0,rect.size.width,100000));
    
    CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL);
    
    NSArray *lines = (__bridge NSArray *)CTFrameGetLines(frame);
    NSMutableArray *linesArray = [[NSMutableArray alloc]init];
    
    for (id line in lines)
    {
        CTLineRef lineRef = (__bridge CTLineRef )line;
        CFRange lineRange = CTLineGetStringRange(lineRef);
        NSRange range = NSMakeRange(lineRange.location, lineRange.length);
        
        NSString *lineString = [text substringWithRange:range];
        [linesArray addObject:lineString];
    }
    
    CFRelease(frameSetter);
    CFRelease(myFont);
    CFRelease(frame);
    CFRelease(path);
    
    return (NSArray *)linesArray;
}

#pragma mark - 完美解決 向UILable 文字最后插入N張圖片,支持向限制行數(shù)的UILable 最后一行插入,多余文字顯示...

/**
 *  向文字末尾追加圖片,適用于已知Size的UILable
 *
 *  @param contentStr 文字內(nèi)容
 *  @param imgs       插入的圖片數(shù)組, 圖片最好帶間隔哦
 */
-(void)insertImgToContentLast:(NSString *)contentStr imgs:(NSArray *)imgs{
    if (IsEmpty(contentStr) || !imgs || [imgs count] == 0) {
        self.text = IsEmpty(contentStr)?@"":contentStr;
        return ;
    }
    
    [self insertImgToContentLast:contentStr imgs:imgs estimateWidth:[self frame].size.width];
}
/**
 *  向文字末尾追加圖片,適用于AutoLayout 的UILable
 *
 *  @param contentStr    文字內(nèi)容
 *  @param imgs          插入的圖片數(shù)組, 圖片最好帶間隔哦
 *  @param estimateWidth 預(yù)估的UILable 最大寬度(已知的最大寬度)
 */
-(void)insertImgToContentLast:(NSString *)contentStr imgs:(NSArray *)imgs estimateWidth:(CGFloat)estimateWidth{
    if (IsEmpty(contentStr) || !imgs || [imgs count] == 0 || estimateWidth == 0) {
        self.text = IsEmpty(contentStr)?@"":contentStr;
        return ;
    }

    //獲取每行文字需要預(yù)設(shè)寬度,不然每個(gè)字都會是單獨(dú)的一行
    self.width = estimateWidth;
    NSArray *textLineArr =  [self getSeparatedLinesWithText:contentStr];
    NSInteger maxLine = self.numberOfLines;
    
    if (maxLine ==  0) {
        self.text = contentStr;
        //追加圖片
        [self configTitleLableAttributedString:imgs AttributedString:nil];
        return;
    }
    NSInteger lastLineIndex = maxLine - 1;

    if ([textLineArr count] <= lastLineIndex) {
        self.text = contentStr;
        //追加圖片
        [self configTitleLableAttributedString:imgs AttributedString:nil];
        return;
    }
    
    __block CGFloat imgWith = 0.0;
    [imgs enumerateObjectsUsingBlock:^(UIImage* img, NSUInteger idx, BOOL * _Nonnull stop) {
        imgWith += img.size.width;
    }];
    
    CGFloat lastTextMaxWith = estimateWidth - imgWith;
    if (lastTextMaxWith <= 0) {
        self.text = contentStr;
        //追加圖片
        [self configTitleLableAttributedString:imgs AttributedString:nil];
        return ;
    }

    if ([textLineArr count] > lastLineIndex) {
        NSMutableString *muShowTitle = [NSMutableString string];
        [textLineArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            if (idx > (lastLineIndex - 1)) {
                //預(yù)設(shè)寬度
                self.width = lastTextMaxWith;
                //最大寬帶下能顯示的字?jǐn)?shù)
                NSArray *lastLineArr = [self getSeparatedLinesWithText:textLineArr[lastLineIndex]];
                NSString *lastLineText = lastLineArr[0];
                //                DDLogDebug(@"====lastLineText=======%@==",lastLineText);
                if ([lastLineArr count] > 1) {
                    lastLineText = [lastLineText stringByReplacingCharactersInRange:NSMakeRange(lastLineText.length - 3, 3) withString:@"..."];
                }
                //                DDLogDebug(@"====lastLineArr[0]=======%@==",lastLineText);
                [muShowTitle appendString:lastLineText];
                
                * stop = YES;
                return ;
            }
            [muShowTitle appendString:textLineArr[idx]];
        }];
        self.text = muShowTitle;
//        self.width = estimateWidth;
    }

    //追加圖片
    [self configTitleLableAttributedString:imgs AttributedString:nil];
}

/**
 *  向已知文字后插入圖片
 *
 *  @param insertImgArr           insertImgArr description
 *  @param appendAttributedString 可為nil
 */
-(void)configTitleLableAttributedString:(NSArray *)insertImgArr AttributedString:(NSMutableAttributedString *)appendAttributedString{
    if (!insertImgArr || [insertImgArr count] == 0) {
        return ;
    }
    if (!appendAttributedString) {
        appendAttributedString = [[NSMutableAttributedString alloc] initWithString:self.text];
    }
  
    [insertImgArr enumerateObjectsUsingBlock:^(UIImage* img, NSUInteger idx, BOOL * _Nonnull stop) {
        
        NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
        //帶 x 的
        textAttachment.image = img;
        
        CGFloat mid = self.font.descender + self.font.capHeight;
        CGFloat imgY = self.font.descender - textAttachment.image.size.height/2 + mid + 2;
        textAttachment.bounds = CGRectMake(0, imgY, textAttachment.image.size.width, textAttachment.image.size.height);
        
        NSAttributedString *iconAttributedString = [NSAttributedString attributedStringWithAttachment:textAttachment];
        [appendAttributedString replaceCharactersInRange:NSMakeRange(self.text.length, 0) withAttributedString:iconAttributedString];
        /**
         fix,當(dāng)文字剛好夠一行,添加圖片后折行著洼,but.第二行圖片和第一行文字沒有行間距易茬。。
         http://scottzhu.com/blog/2015/02/14/attach-stars-to-the-end-of-a-uilabel/
         */
        [appendAttributedString appendAttributedString: [[NSAttributedString alloc] initWithString:@" "]];

        
    }];
    
    self.attributedText = appendAttributedString;
}

@end

作者郵件:zhangxmsy@163.com萧吠, 有問題聯(lián)系左冬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市纸型,隨后出現(xiàn)的幾起案子拇砰,更是在濱河造成了極大的恐慌,老刑警劉巖狰腌,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件除破,死亡現(xiàn)場離奇詭異,居然都是意外死亡琼腔,警方通過查閱死者的電腦和手機(jī)瑰枫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丹莲,“玉大人光坝,你說我怎么就攤上這事』浚” “怎么了教馆?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長擂达。 經(jīng)常有香客問我土铺,道長,這世上最難降的妖魔是什么板鬓? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任悲敷,我火速辦了婚禮,結(jié)果婚禮上俭令,老公的妹妹穿的比我還像新娘后德。我一直安慰自己,他們只是感情好抄腔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布瓢湃。 她就那樣靜靜地躺著,像睡著了一般赫蛇。 火紅的嫁衣襯著肌膚如雪绵患。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天悟耘,我揣著相機(jī)與錄音落蝙,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛筏勒,可吹牛的內(nèi)容都是我干的移迫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼管行,長吁一口氣:“原來是場噩夢啊……” “哼厨埋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起病瞳,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤揽咕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后套菜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亲善,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年逗柴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛹头。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡戏溺,死狀恐怖渣蜗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旷祸,我是刑警寧澤耕拷,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站托享,受9級特大地震影響骚烧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闰围,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一赃绊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧羡榴,春花似錦碧查、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至迄沫,卻和暖如春稻扬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邢滑。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工腐螟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人困后。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓乐纸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親摇予。 傳聞我的和親對象是個(gè)殘疾皇子汽绢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354