UILabel使用技巧

简介:

UILabel的各种属性与方法的使用(转)

 

[cpp]  view plain copy
 
  1. #import "LabelTestViewController.h"       
  2. @implementation LabelTestViewController       
  3. /*    
  4.  Accessing the Text Attributes    
  5.  text  property      
  6.  font  property      
  7.  textColor  property      
  8.  textAlignment  property      
  9.  lineBreakMode  property        
  10.  enabled  property      
  11.  Sizing the Label’s Text    
  12.  adjustsFontSizeToFitWidth  property      
  13.  baselineAdjustment  property      
  14.  minimumFontSize  property   无例    
  15.  numberOfLines  property      
  16.  Managing Highlight Values    
  17.  highlightedTextColor  property      
  18.  highlighted  property      
  19.  Drawing a Shadow    
  20.  shadowColor  property      
  21.  shadowOffset  property      
  22.  Drawing and Positioning Overrides    
  23.  – textRectForBounds:limitedToNumberOfLines: 无例     
  24.  – drawTextInRect:  无例    
  25.  Setting and Getting Attributes    
  26.  userInteractionEnabled  property      
  27.  */      
  28. // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.       
  29. - (void)viewDidLoad {       
  30.     UILabel *label1 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 20.0, 200.0, 50.0)];       
  31.     UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 80.0, 200.0, 50.0)];       
  32.     UILabel *label3 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 140.0, 200.0, 50.0)];       
  33.     UILabel *label4 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 200.0, 200.0, 50.0)];       
  34.     UILabel *label5 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 260.0, 200.0, 50.0)];       
  35.     UILabel *label6 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 320.0, 200.0, 50.0)];       
  36.     UILabel *label7 = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 380.0, 200.0, 50.0)];       
  37.     //设置显示文字       
  38.     label1.text = @"label1";       
  39.     label2.text = @"label2";       
  40.     label3.text = @"label3--label3--label3--label3--label3--label3--label3--label3--label3--label3--label3--";       
  41.     label4.text = @"label4--label4--label4--label4--";       
  42.     label5.text = @"label5--label5--label5--label5--label5--label5--";       
  43.     label6.text = @"label6";       
  44.     label7.text = @"label7";       
  45.     //设置字体:粗体,正常的是 SystemFontOfSize       
  46.     label1.font = [UIFont boldSystemFontOfSize:20];       
  47.     //设置文字颜色    
  48.     label1.textColor = [UIColor orangeColor];       
  49.     label2.textColor = [UIColor purpleColor];       
  50.     //设置文字位置       
  51.     label1.textAlignment = UITextAlignmentRight;       
  52.     label2.textAlignment = UITextAlignmentCenter;       
  53.     //设置字体大小适应label宽度       
  54.     label4.adjustsFontSizeToFitWidth = YES;       
  55.     
  56.     //设置label的行数       
  57.     label5.numberOfLines = 2;      
  58.     UIlabel.backgroudColor=[UIColor clearColor]; //可以去掉背景色     
  59.    
  60.     //设置高亮       
  61.     label6.highlighted = YES;       
  62.     label6.highlightedTextColor = [UIColor orangeColor];       
  63.     //设置阴影       
  64.     label7.shadowColor = [UIColor redColor];       
  65.     label7.shadowOffset = CGSizeMake(1.0,1.0);       
  66.     //设置是否能与用户进行交互       
  67.     label7.userInteractionEnabled = YES;       
  68.     //设置label中的文字是否可变,默认值是YES       
  69.     label3.enabled = NO;       
  70.     //设置文字过长时的显示格式       
  71.     label3.lineBreakMode = UILineBreakModeMiddleTruncation;//截去中间       
  72. //  typedef enum {       
  73. //      UILineBreakModeWordWrap = 0,       
  74. //      UILineBreakModeCharacterWrap,       
  75. //      UILineBreakModeClip,//截去多余部分       
  76. //      UILineBreakModeHeadTruncation,//截去头部       
  77. //      UILineBreakModeTailTruncation,//截去尾部       
  78. //      UILineBreakModeMiddleTruncation,//截去中间       
  79. //  } UILineBreakMode;       
  80.     //如果adjustsFontSizeToFitWidth属性设置为YES,这个属性就来控制文本基线的行为       
  81.     label4.baselineAdjustment = UIBaselineAdjustmentNone;       
  82. //  typedef enum {       
  83. //      UIBaselineAdjustmentAlignBaselines,       
  84. //      UIBaselineAdjustmentAlignCenters,       
  85. //      UIBaselineAdjustmentNone,       
  86. //  } UIBaselineAdjustment;       
  87.     [self.view addSubview:label1];       
  88.     [self.view addSubview:label2];       
  89.     [self.view addSubview:label3];       
  90.     [self.view addSubview:label4];       
  91.     [self.view addSubview:label5];       
  92.     [self.view addSubview:label6];       
  93.     [self.view addSubview:label7];       
  94.     [label1 release];       
  95.     [label2 release];       
  96.     [label3 release];       
  97.     [label4 release];       
  98.     [label5 release];       
  99.     [label6 release];       
  100.     [label7 release];       
  101.     [super viewDidLoad];       
  102. }       
  103. /*    
  104.  // Override to allow orientations other than the default portrait orientation.    
  105.  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {    
  106.  // Return YES for supported orientations    
  107.  return (interfaceOrientation == UIInterfaceOrientationPortrait);    
  108.  }    
  109.  */      
  110. - (void)didReceiveMemoryWarning {       
  111.     // Releases the view if it doesn't have a superview.       
  112.     [super didReceiveMemoryWarning];       
  113.     // Release any cached data, images, etc that aren't in use.       
  114. }       
  115. - (void)viewDidUnload {       
  116.     // Release any retained subviews of the main view.       
  117.     // e.g. self.myOutlet = nil;       
  118. }       
  119. - (void)dealloc {       
  120.     [super dealloc];       
  121. }       
  122. @end   

 


 

UIFont字体设置

 

一、创建任意样式字体

 

[cpp]  view plain copy
 
  1. label.font = [UIFont fontWithName:@"fontName" size:17];  
  2. label.font = [label.font fontWithSize:17];  

 

二、创建指定大小的系统默认字体(默认:Helvetica)

 

[cpp]  view plain copy
 
  1. label.font = [UIFont systemFontOfSize:17];  
  2. label.font = [UIFont boldSystemFontOfSize:17];  // 指定大小粗体  
  3. label.font = [UIFont italicSystemFontOfSize:17];  // 指定大小斜体  

三、获取可用的字体名数组

 

 

[cpp]  view plain copy
 
  1. NSArray *fontFamilies = [UIFont familyNames];                           // 返回所有可用的fontFamily  
  2. NSArray *fontNames = [UIFont fontNamesForFamilyName:@"fongFamilyName"]; // 返回指定fontFamily下的所有fontName  

四、获取指定字体的familyName/fontName

 

 

[cpp]  view plain copy
 
  1. NSString *familyName = [label.font familyName];  
  2. NSString *fontName = [label.font fontName];  

五、获取系统标准字体大小

 

 

[cpp]  view plain copy
 
  1. CGFloat labelFontSize = [UIFont labelFontSize];    // Returns the standard font size used for labels.  
  2. CGFloat buttonFontSize = [UIFont buttonFontSize];  // Returns the standard font size used for buttons.  
  3. CGFloat smallSystemFontSize = [UIFont smallSystemFontSize]; // Returns the size of the standard small system font.  
  4. CGFloat systemFontSize = [UIFont systemFontSize];  // Returns the size of the standard system font.  


 

附字体样式表:

 

Thonburi

   -Thonburi-Bold

   -Thonburi

 Snell Roundhand

   -SnellRoundhand-Bold

   -SnellRoundhand-Black

   -SnellRoundhand

 Academy Engraved LET

   -AcademyEngravedLetPlain

 Avenir

   -Avenir-LightOblique

   -Avenir-MediumOblique

   -Avenir-Medium

   -Avenir-HeavyOblique

   -Avenir-BlackOblique

   -Avenir-Oblique

   -Avenir-Book

   -Avenir-Roman

   -Avenir-BookOblique

   -Avenir-Light

   -Avenir-Heavy

   -Avenir-Black

 Marker Felt

   -MarkerFelt-Wide

   -MarkerFelt-Thin

 Geeza Pro

   -GeezaPro-Bold

   -GeezaPro

 Arial Rounded MT Bold

   -ArialRoundedMTBold

 Trebuchet MS

   -TrebuchetMS

   -TrebuchetMS-Bold

   -TrebuchetMS-Italic

   -Trebuchet-BoldItalic

 Arial

   -Arial-BoldMT

   -ArialMT

   -Arial-ItalicMT

   -Arial-BoldItalicMT

 Marion

   -Marion-Regular

   -Marion-Bold

   -Marion-Italic

 Gurmukhi MN

   -GurmukhiMN

   -GurmukhiMN-Bold

 Malayalam Sangam MN

   -MalayalamSangamMN-Bold

   -MalayalamSangamMN

 Bradley Hand

   -BradleyHandITCTT-Bold

 Kannada Sangam MN

   -KannadaSangamMN

   -KannadaSangamMN-Bold

 Bodoni 72 Oldstyle

   -BodoniSvtyTwoOSITCTT-Book

   -BodoniSvtyTwoOSITCTT-Bold

   -BodoniSvtyTwoOSITCTT-BookIt

 Cochin

   -Cochin

   -Cochin-BoldItalic

   -Cochin-Italic

   -Cochin-Bold

 Sinhala Sangam MN

   -SinhalaSangamMN

   -SinhalaSangamMN-Bold

 Hiragino Kaku Gothic ProN

   -HiraKakuProN-W6

   -HiraKakuProN-W3

 Papyrus

   -Papyrus-Condensed

   -Papyrus

 Verdana

   -Verdana

   -Verdana-Bold

   -Verdana-BoldItalic

   -Verdana-Italic

 Zapf Dingbats

   -ZapfDingbatsITC

 Avenir Next Condensed

   -AvenirNextCondensed-HeavyItalic

   -AvenirNextCondensed-DemiBold

   -AvenirNextCondensed-Italic

   -AvenirNextCondensed-Heavy

   -AvenirNextCondensed-DemiBoldItalic

   -AvenirNextCondensed-Medium

   -AvenirNextCondensed-BoldItalic

   -AvenirNextCondensed-Bold

   -AvenirNextCondensed-UltraLightItalic

   -AvenirNextCondensed-UltraLight

   -AvenirNextCondensed-MediumItalic

   -AvenirNextCondensed-Regular

 Courier

   -Courier-Bold

   -Courier

   -Courier-BoldOblique

   -Courier-Oblique

 Hoefler Text

   -HoeflerText-Black

   -HoeflerText-Italic

   -HoeflerText-Regular

   -HoeflerText-BlackItalic

 Helvetica

   -Helvetica-LightOblique

   -Helvetica

   -Helvetica-Oblique

   -Helvetica-BoldOblique

   -Helvetica-Bold

   -Helvetica-Light

 Euphemia UCAS

   -EuphemiaUCAS-Bold

   -EuphemiaUCAS

   -EuphemiaUCAS-Italic

 Hiragino Mincho ProN

   -HiraMinProN-W3

   -HiraMinProN-W6

 Bodoni Ornaments

   -BodoniOrnamentsITCTT

 Apple Color Emoji

   -AppleColorEmoji

 Optima

   -Optima-ExtraBlack

   -Optima-Italic

   -Optima-Regular

   -Optima-BoldItalic

   -Optima-Bold

 Gujarati Sangam MN

   -GujaratiSangamMN

   -GujaratiSangamMN-Bold

 Devanagari Sangam MN

   -DevanagariSangamMN

   -DevanagariSangamMN-Bold

 Times New Roman

   -TimesNewRomanPS-ItalicMT

   -TimesNewRomanPS-BoldMT

   -TimesNewRomanPSMT

   -TimesNewRomanPS-BoldItalicMT

 Kailasa

   -Kailasa

   -Kailasa-Bold

 Telugu Sangam MN

   -TeluguSangamMN-Bold

   -TeluguSangamMN

 Heiti SC

   -STHeitiSC-Medium

   -STHeitiSC-Light

 Apple SD Gothic Neo

   -AppleSDGothicNeo-Bold

   -AppleSDGothicNeo-Medium

 Futura

   -Futura-Medium

   -Futura-CondensedExtraBold

   -Futura-CondensedMedium

   -Futura-MediumItalic

 Bodoni 72

   -BodoniSvtyTwoITCTT-BookIta

   -BodoniSvtyTwoITCTT-Book

   -BodoniSvtyTwoITCTT-Bold

 Baskerville

   -Baskerville-SemiBoldItalic

   -Baskerville-Bold

   -Baskerville-Italic

   -Baskerville-BoldItalic

   -Baskerville-SemiBold

   -Baskerville

 Chalkboard SE

   -ChalkboardSE-Regular

   -ChalkboardSE-Bold

   -ChalkboardSE-Light

 Heiti TC

   -STHeitiTC-Medium

   -STHeitiTC-Light

 Copperplate

   -Copperplate

   -Copperplate-Light

   -Copperplate-Bold

 Party LET

   -PartyLetPlain

 American Typewriter

   -AmericanTypewriter-CondensedLight

   -AmericanTypewriter-Light

   -AmericanTypewriter-Bold

   -AmericanTypewriter

   -AmericanTypewriter-CondensedBold

   -AmericanTypewriter-Condensed

 Symbol

   -Symbol

 Avenir Next

   -AvenirNext-Heavy

   -AvenirNext-DemiBoldItalic

   -AvenirNext-UltraLightItalic

   -AvenirNext-HeavyItalic

   -AvenirNext-MediumItalic

   -AvenirNext-UltraLight

   -AvenirNext-BoldItalic

   -AvenirNext-DemiBold

   -AvenirNext-Bold

   -AvenirNext-Regular

   -AvenirNext-Medium

   -AvenirNext-Italic

 Noteworthy

   -Noteworthy-Light

   -Noteworthy-Bold

 Bangla Sangam MN

   -BanglaSangamMN-Bold

   -BanglaSangamMN

 Zapfino

   -Zapfino

 Tamil Sangam MN

   -TamilSangamMN

   -TamilSangamMN-Bold

 Chalkduster

   -Chalkduster

 Arial Hebrew

   -ArialHebrew

   -ArialHebrew-Bold

 Georgia

   -Georgia-Italic

   -Georgia-BoldItalic

   -Georgia-Bold

   -Georgia

 Helvetica Neue

   -HelveticaNeue-Bold

   -HelveticaNeue-CondensedBlack

   -HelveticaNeue-Medium

   -HelveticaNeue

   -HelveticaNeue-Light

   -HelveticaNeue-CondensedBold

   -HelveticaNeue-LightItalic

   -HelveticaNeue-UltraLightItalic

   -HelveticaNeue-UltraLight

   -HelveticaNeue-BoldItalic

   -HelveticaNeue-Italic

 Gill Sans

   -GillSans-LightItalic

   -GillSans-BoldItalic

   -GillSans-Italic

   -GillSans

   -GillSans-Bold

   -GillSans-Light

 Palatino

   -Palatino-Roman

   -Palatino-Bold

   -Palatino-BoldItalic

   -Palatino-Italic

 Courier New

   -CourierNewPS-BoldMT

   -CourierNewPSMT

   -CourierNewPS-BoldItalicMT

   -CourierNewPS-ItalicMT

 Oriya Sangam MN

   -OriyaSangamMN-Bold

   -OriyaSangamMN

 Didot

   -Didot-Italic

   -Didot

   -Didot-Bold

 Bodoni 72 Smallcaps

   -BodoniSvtyTwoSCITCTT-Book


 

文本大小自适应

 

      文本大小自适应需要调用NSString类的实例方法计算出文本的size,然后根据这个size来设定UILabel的frame来实现。计算size的方法有:

(1)  - sizeWithFont: 

[cpp]  view plain copy
 
  1. - (CGSize)countTextSize:(NSString *)text  
  2. {  
  3.     /* 
  4.      1、换行方式默认取NSLineBreakByWordWrapping; 
  5.      2、求出的size是单行显示时的高度和宽度. 
  6.      */  
  7.     UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];  
  8.     CGSize size = [text sizeWithFont:font];  
  9.     return  size;  
  10. }  

(2)  - sizeWithFont: forWidth: lineBreakMode:

[cpp]  view plain copy
 
  1. - (CGSize)countTextSize:(NSString *)text  
  2. {  
  3.     /* 
  4.      1、如果指定宽度小于字符串宽度,则宽度返回0;  
  5.      2、求出的size是单行显示时的高度和宽度. 
  6.      */  
  7.     UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];  
  8.     CGSize size = [text sizeWithFont:font forWidth:400.0f lineBreakMode:NSLineBreakByWordWrapping];  
  9.     return  size;  
  10. }  

(3)  - sizeWithFont: constrainedToSize:

[cpp]  view plain copy
 
  1. - (CGSize)countTextSize:(NSString *)text  
  2. {  
  3.     /* 
  4.      字符串用指定字体在指定区域进行单行显示时,需要的高度和宽度; 
  5.      一般的用法是,指定区域的高度固定而宽度用MAXFLOAT,则返回值包含对应的宽度; 
  6.      如果指定区域的宽度不够,则宽度返回0;高度不够则没影响; 
  7.      核心:单行显示,指定区域的宽度要够大,获取宽度. 
  8.      */  
  9.     UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];  
  10.     CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, 100.0f)];  
  11.     return  size;  
  12. }  

(4)  - sizeWithFont: constrainedToSize: lineBreakMode:  (最常用)

[cpp]  view plain copy
 
  1. - (CGSize)countTextSize:(NSString *)text  
  2. {  
  3.     /* 
  4.      字符串在指定区域内按照指定的字体显示时,需要的高度和宽度(宽度在字符串只有一行时有用) 
  5.      一般用法:指定区域的宽度而高度用MAXFLOAT,则返回值包含对应的高度 
  6.      如果指定区域的宽度指定,而字符串要显示的区域的高度超过了指定区域的高度,则高度返回0 
  7.      核心:多行显示,指定宽度,获取高度 
  8.      */  
  9.     UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];  
  10.     CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(320.f, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping];  
  11.     return  size;  
  12. }  

(5)  - sizeWithFont: minFontSize: actualFontSize: forWidth: lineBreakMode:

[cpp]  view plain copy
 
  1. - (CGSize)countTextSize:(NSString *)text  
  2. {  
  3.     /* 
  4.      虽然指定了换行方式,在实际计算时也会换行,但返回的结果只是第一行的高度很宽度; 
  5.      指定了应该显示的字体,最小的字体,实际的字体,在实际计算中,如果宽度不够,则尽量缩小字符串的字体直至能够一行全部显示,如果缩到最小还不能完全显示字符串,则进行截断,返回截断后的字符串的高度和宽度;  
  6.      字体实际的大小,存放在 actualFontSize里. 
  7.      */  
  8.     UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];  
  9.     CGFloat f = 0.0f;   
  10.     CGSize size = [text sizeWithFont:font minFontSize:10.0f actualFontSize:&f forWidth:100.0f lineBreakMode:NSLineBreakByWordWrapping];  
  11.     return  size;  
  12. }  



 

参考资料:http://blog.csdn.net/mamong/article/details/8542404

 



本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3508754.html,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
Ubuntu Windows
双系统必备:Ubuntu自动挂载Windows分区
在双系统环境下,手动挂载Windows硬盘十分繁琐。本文介绍如何配置Ubuntu开机自动挂载Windows硬盘,包括硬盘识别、挂载点创建、fstab配置及验证步骤,帮助您节省时间,实现高效操作。
410 1
|
JSON JavaScript 数据可视化
开发 CNode 技术社区智能体
CNode 社区是国内最大的 Node.js 开源技术社区,致力于 Node.js 技术研究。本文基于 Botnow 平台,通过创建 Bot、插件及工作流,详细介绍了如何利用 CNode 社区的开放 API 构建智能体,并最终发布上线,实现智能化交互功能。
|
12月前
|
人工智能
AnchorCrafter:中科院联合腾讯推出的AI虚拟主播带货视频制作技术
AnchorCrafter是由中科院和腾讯联合推出的一项AI虚拟主播带货视频制作技术。该技术基于扩散模型,能够自动生成高保真度的主播风格产品推广视频,通过整合人-物交互(HOI)技术,实现对物体外观和运动控制的高度还原。AnchorCrafter在物体外观保持、交互感知以及视频质量方面优于现有方法,为在线广告和消费者参与提供了新的可能性。
1571 31
AnchorCrafter:中科院联合腾讯推出的AI虚拟主播带货视频制作技术
|
机器学习/深度学习 PyTorch 语音技术
语音识别模型
Whisper 是 OpenAI 推出的语音处理项目,基于深度学习,具备高度智能化和准确性的语音识别、翻译和生成能力。通过丰富的数据集和先进的注意力机制,Whisper 在多种语言环境下表现出色,支持语音识别、翻译、口语识别和语音活动检测等多种任务。用户可以通过 Python 代码或命令行轻松使用 Whisper,完成高质量的语音处理任务。官网:https://openai.com/research/whisper,GitHub:https://github.com/openai/whisper。
|
存储 开发框架 自然语言处理
【Uniapp 专栏】Uniapp 的多语言支持功能详解
【5月更文挑战第14天】Uniapp是一款跨平台开发框架,提供强大多语言支持,助力开发者轻松构建支持多种语言的应用,提升用户体验和市场拓展。其特点包括灵活的语言管理、跨平台一致性。通过语言文件存储内容,切换机制让用户自由切换。注重翻译准确性和文化适应性,集成到页面和组件中,同时关注性能优化。面对翻译不一致和更新及时性等问题,Uniapp将持续发展和完善,为全球化应用开发提供强有力支持。
765 3
【Uniapp 专栏】Uniapp 的多语言支持功能详解
|
人工智能 算法 物联网
企业级RAG全链路优化关键技术
本文深入解析了企业级RAG全链路的关键技术、效果优化、性能优化及应用实践。
1039 7
|
存储 Java Apache
利用 Java 的 ArrayUtils 优化数组操作:简洁高效的数组处理
在 Java 编程中,数组是一种基础且常见的数据结构,用于存储同类型的元素。然而,Java 原生的数组操作有时显得不够便捷和灵活。Apache Commons Lang 库中的 `ArrayUtils` 类提供了一系列方便且高效的数组处理方法,可以大大提升数组操作的效率。本文将带您深入了解 `ArrayUtils` 类,探讨其特点、用法、实现方式以及在实际应用中的优势。
|
人工智能 测试技术 索引
基于LangChain手工测试用例生成工具
使用Python的LangChain框架,测试工程师能自动化从需求文档生成思维导图。代码示例演示了如何加载文档,提取信息,创建向量索引,执行检索,并通过PlantUML生成MindMap图像。流程中,AI替代了手动梳理需求和创建测试用例的过程,涉及的关键组件包括TextLoader、OpenAIEmbeddings、FAISS检索和AgentExecutor。该实践帮助掌握LangChain的检索和Agent功能,以实现文档到测试用例的智能转换。
|
存储 数据采集 安全
CDAM数据资产管理的策略制定与落地
在数字化时代,数据成为企业的核心资产,直接影响决策效率与市场竞争力。本文探讨数据资产管理策略的制定与实施,涵盖目标设定、组织架构搭建、政策流程制定、工具技术应用、数据战略规划、人才培养、风险管理及持续优化等方面,旨在为企业提供全方位的实践指导。
1006 0
|
前端开发 JavaScript Java
医疗信息系统|基于Springboot+Vue医院挂号及信息化管理系统
医疗信息系统|基于Springboot+Vue医院挂号及信息化管理系统
339 1