1# TabContent 2 3仅在Tabs中使用,对应一个切换页签的内容视图。 4 5> **说明:** 6> 7> 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8 9 10## 子组件 11 12支持单个子组件。 13 14> **说明:** 15> 16> 可内置系统组件和自定义组件,支持渲染控制类型([if/else](../../quick-start/arkts-rendering-control-ifelse.md)、[ForEach](../../quick-start/arkts-rendering-control-foreach.md)和[LazyForEach](../../quick-start/arkts-rendering-control-lazyforeach.md))。 17 18 19## 接口 20 21TabContent() 22 23 24## 属性 25 26除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性: 27 28| 名称 | 参数类型 | 描述 | 29| -------- | -------- | -------- | 30| tabBar | string \| Resource \| {<br/>icon?: string \| Resource,<br/>text?: string \| Resource<br/>}<br/>\| [CustomBuilder](ts-types.md)<sup>8+</sup> | 设置TabBar上显示内容。<br/>CustomBuilder: 构造器,内部可以传入组件(API8版本以上适用)。<br/>> **说明:**<br/>> 如果icon采用svg格式图源,则要求svg图源删除其自有宽高属性值。如采用带有自有宽高属性的svg图源,icon大小则是svg本身内置的宽高属性值大小。<br>设置的内容超出tabbar页签时进行裁切。 | 31| tabBar<sup>9+</sup> | [SubTabBarStyle](#subtabbarstyle) \| [BottomTabBarStyle](#bottomtabbarstyle) | 设置TabBar上显示内容。<br/>SubTabBarStyle: 子页签样式,参数为文字。<br/>BottomTabBarStyle: 底部页签和侧边页签样式,参数为文字和图片。<br/>**说明:** <br/>底部样式没有下划线效果。<br/>icon异常时显示灰色图块。 | 32 33> **说明:** 34> 35> - TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。 36> - TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。 37> - vertical属性为false值,交换上述2个限制。 38> - TabContent组件不支持内容过长时页面的滑动,如需页面滑动,可嵌套List使用。 39 40## SubTabBarStyle<sup>9+</sup> 41 42子页签样式。 43 44### constructor<sup>9+</sup> 45 46constructor(content: string | Resource) 47 48SubTabBarStyle的构造函数。 49 50**参数:** 51 52| 参数名 | 参数类型 | 必填 | 参数描述 | 53| -------- | -------- | -------- | -------- | 54| content | string \| [Resource](ts-types.md#resource) | 是 | 页签内的文字内容。 | 55 56## BottomTabBarStyle<sup>9+</sup> 57 58底部页签和侧边页签样式。 59 60### constructor<sup>9+</sup> 61 62constructor(icon: string | Resource, text: string | Resource) 63 64BottomTabBarStyle的构造函数。 65 66**参数:** 67 68| 参数名 | 参数类型 | 必填 | 参数描述 | 69| -------- | -------- | -------- | -------- | 70| icon | string \| [Resource](ts-types.md#resource) | 是 | 页签内的图片内容。 | 71| text | string \| [Resource](ts-types.md#resource) | 是 | 页签内的文字内容。 | 72 73## 示例 74 75示例1: 76 77```ts 78// xxx.ets 79@Entry 80@Component 81struct TabContentExample { 82 @State fontColor: string = '#182431' 83 @State selectedFontColor: string = '#007DFF' 84 @State currentIndex: number = 0 85 private controller: TabsController = new TabsController() 86 87 @Builder TabBuilder(index: number) { 88 Column() { 89 Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg') 90 .width(24) 91 .height(24) 92 .margin({ bottom: 4 }) 93 .objectFit(ImageFit.Contain) 94 Text(`Tab${index + 1}`) 95 .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor) 96 .fontSize(10) 97 .fontWeight(500) 98 .lineHeight(14) 99 }.width('100%') 100 } 101 102 build() { 103 Column() { 104 Tabs({ barPosition: BarPosition.End, controller: this.controller }) { 105 TabContent() { 106 Column() { 107 Text('Tab1') 108 .fontSize(36) 109 .fontColor('#182431') 110 .fontWeight(500) 111 .opacity(0.4) 112 .margin({ top: 30, bottom: 56.5 }) 113 Divider() 114 .strokeWidth(0.5) 115 .color('#182431') 116 .opacity(0.05) 117 }.width('100%') 118 }.tabBar(this.TabBuilder(0)) 119 120 TabContent() { 121 Column() { 122 Text('Tab2') 123 .fontSize(36) 124 .fontColor('#182431') 125 .fontWeight(500) 126 .opacity(0.4) 127 .margin({ top: 30, bottom: 56.5 }) 128 Divider() 129 .strokeWidth(0.5) 130 .color('#182431') 131 .opacity(0.05) 132 }.width('100%') 133 }.tabBar(this.TabBuilder(1)) 134 135 TabContent() { 136 Column() { 137 Text('Tab3') 138 .fontSize(36) 139 .fontColor('#182431') 140 .fontWeight(500) 141 .opacity(0.4) 142 .margin({ top: 30, bottom: 56.5 }) 143 Divider() 144 .strokeWidth(0.5) 145 .color('#182431') 146 .opacity(0.05) 147 }.width('100%') 148 }.tabBar(this.TabBuilder(2)) 149 150 TabContent() { 151 Column() { 152 Text('Tab4') 153 .fontSize(36) 154 .fontColor('#182431') 155 .fontWeight(500) 156 .opacity(0.4) 157 .margin({ top: 30, bottom: 56.5 }) 158 Divider() 159 .strokeWidth(0.5) 160 .color('#182431') 161 .opacity(0.05) 162 }.width('100%') 163 }.tabBar(this.TabBuilder(3)) 164 } 165 .vertical(false) 166 .barHeight(56) 167 .onChange((index: number) => { 168 this.currentIndex = index 169 }) 170 .width(360) 171 .height(190) 172 .backgroundColor('#F1F3F5') 173 .margin({ top: 38 }) 174 }.width('100%') 175 } 176} 177``` 178 179![tabContent](figures/tabContent1.gif) 180 181示例2: 182 183```ts 184// xxx.ets 185@Entry 186@Component 187struct TabContentExample { 188 @State fontColor: string = '#182431' 189 @State selectedFontColor: string = '#007DFF' 190 @State currentIndex: number = 0 191 private controller: TabsController = new TabsController() 192 193 @Builder TabBuilder(index: number) { 194 Column() { 195 Image(this.currentIndex === index ? '/common/public_icon_on.svg' : '/common/public_icon_off.svg') 196 .width(24) 197 .height(24) 198 .margin({ bottom: 4 }) 199 .objectFit(ImageFit.Contain) 200 Text('Tab') 201 .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor) 202 .fontSize(10) 203 .fontWeight(500) 204 .lineHeight(14) 205 }.width('100%').height('100%').justifyContent(FlexAlign.Center) 206 } 207 208 build() { 209 Column() { 210 Tabs({ barPosition: BarPosition.Start, controller: this.controller }) { 211 TabContent() 212 .tabBar(this.TabBuilder(0)) 213 TabContent() 214 .tabBar(this.TabBuilder(1)) 215 TabContent() 216 .tabBar(this.TabBuilder(2)) 217 TabContent() 218 .tabBar(this.TabBuilder(3)) 219 } 220 .vertical(true) 221 .barWidth(96) 222 .barHeight(414) 223 .onChange((index: number) => { 224 this.currentIndex = index 225 }) 226 .width(96) 227 .height(414) 228 .backgroundColor('#F1F3F5') 229 .margin({ top: 52 }) 230 }.width('100%') 231 } 232} 233``` 234 235![tabContent](figures/tabContent2.gif) 236 237示例3: 238 239```ts 240// xxx.ets 241@Entry 242@Component 243struct TabBarStyleExample { 244 build() { 245 Column({ space: 5 }) { 246 Text("子页签样式") 247 Column() { 248 Tabs({ barPosition: BarPosition.Start }) { 249 TabContent() { 250 Column().width('100%').height('100%').backgroundColor(Color.Pink) 251 }.tabBar(new SubTabBarStyle('Pink')) 252 253 TabContent() { 254 Column().width('100%').height('100%').backgroundColor(Color.Yellow) 255 }.tabBar(new SubTabBarStyle('Yellow')) 256 257 TabContent() { 258 Column().width('100%').height('100%').backgroundColor(Color.Blue) 259 }.tabBar(new SubTabBarStyle('Blue')) 260 261 TabContent() { 262 Column().width('100%').height('100%').backgroundColor(Color.Green) 263 }.tabBar(new SubTabBarStyle('Green')) 264 } 265 .vertical(false) 266 .scrollable(true) 267 .barMode(BarMode.Fixed) 268 .onChange((index: number) => { 269 console.info(index.toString()) 270 }) 271 .width('100%') 272 .backgroundColor(0xF1F3F5) 273 }.width('100%').height(200) 274 Text("底部页签样式") 275 Column() { 276 Tabs({ barPosition: BarPosition.End }) { 277 TabContent() { 278 Column().width('100%').height('100%').backgroundColor(Color.Pink) 279 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'pink')) 280 281 TabContent() { 282 Column().width('100%').height('100%').backgroundColor(Color.Yellow) 283 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Yellow')) 284 285 TabContent() { 286 Column().width('100%').height('100%').backgroundColor(Color.Blue) 287 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Blue')) 288 289 TabContent() { 290 Column().width('100%').height('100%').backgroundColor(Color.Green) 291 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Green')) 292 } 293 .vertical(false) 294 .scrollable(true) 295 .barMode(BarMode.Fixed) 296 .onChange((index: number) => { 297 console.info(index.toString()) 298 }) 299 .width('100%') 300 .backgroundColor(0xF1F3F5) 301 }.width('100%').height(200) 302 Text("侧边页签样式") 303 Column() { 304 Tabs({ barPosition: BarPosition.Start }) { 305 TabContent() { 306 Column().width('100%').height('100%').backgroundColor(Color.Pink) 307 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'pink')) 308 309 TabContent() { 310 Column().width('100%').height('100%').backgroundColor(Color.Yellow) 311 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Yellow')) 312 313 TabContent() { 314 Column().width('100%').height('100%').backgroundColor(Color.Blue) 315 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Blue')) 316 317 TabContent() { 318 Column().width('100%').height('100%').backgroundColor(Color.Green) 319 }.tabBar(new BottomTabBarStyle($r('sys.media.ohos_app_icon'), 'Green')) 320 } 321 .vertical(true).scrollable(true).barMode(BarMode.Fixed) 322 .onChange((index: number) => { 323 console.info(index.toString()) 324 }) 325 .width('100%') 326 .backgroundColor(0xF1F3F5) 327 }.width('100%').height(400) 328 } 329 } 330} 331``` 332 333![tabbarStyle](figures/TabBarStyle.jpeg) 334