采用标签声明界面元素, 类似 React. 界面布局系统采用 Flexbox 加上绝对定位, 和 Web 开发体验大体一致.
和 Web 一样, 可以通过 margin, border, padding 来控制布局跟盒子样式.
可以设置 backgroundColor, 然而没有 backgoundImage 属性, 需要通过 Image 元素组合(参考 http://stackoverflow.com/q/29322973/883571 ).
Flexbox 和 Web 基本一致, 主要的区别是默认 flexDirection: column.
Demo 当中布思路基本上和 Web 端布局一致.
教程 http://www.ruanyifeng.com/blog/2015/07/flex-examples.html
https://github.com/facebook/css-layout#default-values
div, span {
box-sizing: border-box;
position: relative;
display: flex;
flex-direction: column;
align-items: stretch;
flex-shrink: 0;
align-content: flex-start;
border: 0 solid black;
margin: 0;
padding: 0;
min-width: 0;
}支持 position: absolute, 默认根据父节点定位, 不需要在外层元素声明 position: relative.
不支持 position: fixed, 不支持 zIndex, 如果有绝对定位的元素, 需要通过组件顺序控制遮盖关系.
图片必须使用具体大小, 不能使用百分比的写法, 自动伸缩的图片可以借助 Flexbox 配合 resizeMode 使用.
参考 http://wiki.jikexueyuan.com/project/react-native/image.html
水平方向 textAlign: center, 垂直方向建议使用 Flexbox 控制.
fontSize 和 lineHeight 控制不清晰, Demo 开发过程中出现过垂直居中平台样式差异.
可以通过属性控制水平竖直方向. .scrollTo API 调用能够设置是否使用动画.
scrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})
// or
scrollTo(y: number | { x?: number, y?: number, animated?: boolean }, x: number, animated: boolean)
注意平台差异, iOS 中可以设置滚动的值超出限定的区域, Android 不可以.
基于 scrollView 封装的, 继承了全部属性. 超出可视区域的元素不会立即渲染.
注意平台差异, 直接滚动到下方, iOS 中直接滚动到像素位置, Android 滚动到已有内容底部.
Sticky Header 只在 iOS 中生效.
React Native 将点击区域封装成了 TouchableHighlight 元素.
其他元素没有 onPress 或者 onClick 事件.