注意:我在那里发布了一个答案,我个人认为这是迄今为止最好的解决方案.虽然它不是最高级别的答案,但根据我得到的结果,它非常有效.
--------------------------------------------- 原始问题 --- -------------------------------------------------- -
假设我正在写一个Twitter克隆,但更简单.我将每个项目放在FlatList中并渲染它们.
为了"喜欢"一个帖子,我按下帖子上的"喜欢"按钮,"喜欢"按钮变成红色,我再次按下它,它变成灰色.
这就是我到目前为止:我存储了所有加载的帖子this.state,每个帖子都有一个名为"likes"的属性,它是boolean,表示该用户是否喜欢这个帖子,当用户按下"喜欢"时,我去了以state.posts和更新liked该职位的性质,然后利用this.setState更新的帖子,像这样:
// 1. FlatList
<FlatList
...
data={this.state.posts}
renderItem={this.renderPost}
...
/>
// 2. renderPost
renderPost({ item, index }) {
return (
<View style={someStyle}>
... // display other properties of the post
// Then display the "like" button
<Icon
name='favorite'
size={25}
color={item.liked ? 'red' : 'gray'}
containerStyle={someStyle}
iconStyle={someStyle}
onPress={() => this.onLikePost({ item, index })}
/>
...
</View>
);
}
// 3. onLikePost
likePost({ item, index …Run Code Online (Sandbox Code Playgroud) 我知道这个问题已在这里被提出,但它没有解决我的问题,因为接受的答案中的链接已关闭,最小的例子没有帮助.
这是我的自定义UITableViewCell及其所有约束的图片:
每个帖子都包含这些UI元素.唯一可以使每个单元格的高度不同的元素是messageView,因为它的高度取决于显示的字符串.问题是,如何动态设置每个单元格的高度?这是我现在拥有的(不工作,messageView根本没有显示):
func cellForRowAt(indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(...) as! PostCell
let message = ...
cell.messageView.text = message
return cell
}
func heightForRowAt(indexPath: IndexPath) -> CGFloat {
var cellMinimumHeight: CGFloat = 120
if let cell = tableView.cellForRow(at: indexPath) as? PostCell {
let size = cell.messageView.sizeThatFits(cell.messageView.frame.size)
cellMinimumHeight += size.height
}
return cellMinimumHeight
}
Run Code Online (Sandbox Code Playgroud)
在heightForRowAt功能中,if没有被执行,因此,所有单元格的高度都是cellMinimumHeight = 120.
我怎么能让每个单元格的高度= 120 + messageView的高度?
---------------------------------编辑1 --------------- ------------------
在图片中犯了一个错误,messageView …
在 中react-native,将图像转换为BASE64格式很容易,在 的帮助下react-native-fetch-blob,我只需执行以下操作:
RNFetchBlob.fs.readFile(filePath, 'base64')
.then((data) => console.log(data));
Run Code Online (Sandbox Code Playgroud)
但是,反过来呢?我知道有一些软件包可以做到这一点,但我想知道是否可以仅使用react-native-fetch-blob或react-native-fs?
我想要的是在将BASE64图像转换并保存到文件后,我可以像这样显示它:
<Image
source={{ uri: <path/to/converted/image> }}
style={{ ... }}
/>
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经被问过好几次了,但这些解决方案并不适用于我的情况。我已经开始ElasticSearch,Kibana使用这两个命令:
bin/elasticsearch
bin/kibana
Run Code Online (Sandbox Code Playgroud)
并且服务器运行良好,使用浏览器转到 时http://localhost:9200,得到以下结果:
{
"name" : "vg7RnLh",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "gqDf0H67TxGZGYigAlu2mQ",
"version" : {
"number" : "6.1.2",
"build_hash" : "5b1fea5",
"build_date" : "2018-01-10T02:35:59.208Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
Run Code Online (Sandbox Code Playgroud)
使用时kibana,一切正常。下面是我写的firebase cloud函数,如果有什么不对的地方,我想是这里:
exports.downloadUserInfo = functions.https.onRequest((req, res) => {
const { uid } = req.query;
const searchConfig = {
uri: 'http://localhost:9200/users/user/' + uid,
method: 'GET'
}; …Run Code Online (Sandbox Code Playgroud) 我在 a 上面写了一个粘性标题FlatList,我有我想要的,看下面的图片,但是有两个问题。我想要的效果是:
首先图片的高度是170
当用户向上滚动时,图片也会向上滚动
但是当用户滚动 100 时,图片停止向上并停留在那里(意味着显示图片的底部 70)
同时,当用户滚动时,不透明度从 1 减少到最小值 0.5
代码在GIF下面
const { width: SCREEN_WIDTH } = Dimensions.get('window');
const AnimatedFlatList = Animated.createAnimatedComponent(FlatList);
const FULL_HEADER_HEIGHT = 170;
const DEFAULT_HEADER_HEIGHT = 70;
const HEADER_DIFF = FULL_HEADER_HEIGHT - DEFAULT_HEADER_HEIGHT;
class TestScreen extends Component {
constructor(props) {
super(props);
this.state = {
data: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
};
this.scrollY = new Animated.Value(0); // How many pixels scrolled
this.headerOpacity = this.scrollY.interpolate({
inputRange: [0, HEADER_DIFF, HEADER_DIFF …Run Code Online (Sandbox Code Playgroud) 我使用此代码将a转换PHAsset为完整大小UIImage:
func getOriginalAsset(asset: PHAsset, onComplete: @escaping (UIImage?, [AnyHashable: Any]?) -> ()) {
let manager = PHImageManager.default()
let option = PHImageRequestOptions()
option.isNetworkAccessAllowed = true
manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: option) { (image, info) in
onComplete(image, info)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每次我尝试运行此代码时,我都会从控制台收到此警告:
[ImageManager] First stage of an opportunistic image request returned a non-table format image, this is not fatal, but it is unexpected
Run Code Online (Sandbox Code Playgroud)
题
为什么我会收到此警告?
我该如何解决这个问题?
更新
尽管有警告,我运行此代码时一切正常.我无法忍受我的应用程序中的任何警告/错误(也许我迟早要学会接受它)
在我的测试项目中,我创建了 2 个目标,如下所示:
步骤1:
第2步:
步骤3:
之后,我TestClass1.swift在“TestTarget1”和TestClass2.swift“TestTarget2”中创建:
// TestClass1
public TestClass1 {
public static var randomNumber: Int {
return Int.random(in: 1...100)
}
}
Run Code Online (Sandbox Code Playgroud)
在 中TestClass2,我希望访问随机数生成器,而TestClass1无需导入目标“TestTarget1”,这可行吗?例如,通过链接库、框架等。
您可能会想,“为什么不想导入它?” 这很难解释,我相信你并不关心,我只是想知道这是否可行。谢谢你!
在 xv6mmu.h文件中,有这 2 行代码
#define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1))
#define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))
Run Code Online (Sandbox Code Playgroud)
他们在做什么?
到目前为止,这就是我使用redux全局维护登录状态的原因。在我的登录屏幕中,我正在使用动作创建者来登录用户,就像这样...
// In LoginScreen file
onLogin = () => {
this.props.accountLogin({ email, password });
}
Run Code Online (Sandbox Code Playgroud)
并在动作文件accountLogin中定义为:
// In auth_action file
export const accountLogin = ({ email, password }) => {
firebase.auth().signInWithEmailAndPassword(email, password)
.then(user => {
dispatch({ type: LOGIN_SUCCESS, payload: user })});
});
};
Run Code Online (Sandbox Code Playgroud)
然后,在reduce文件中,大小写LOGIN_SUCCESS是这样处理的...
// In auth_reducer file
const INITIAL_STATE = {
// ... Other stuff
user: null
};
export default function (state = INITIAL_STATE, action) {
// ... Other cases
// Login Successful case
case …Run Code Online (Sandbox Code Playgroud) 假设我正在编写一个Twitter克隆,但要简单得多。这是一张“帖子”的图片
在帖子的底部,有一个我称之为的Social Bar东西,其中包含3个按钮comment,message和like按钮。comment按钮可让用户对帖子发表评论,message按钮可让用户向帖子所有者发送消息,like按钮可让用户“喜欢”帖子。按下like按钮时,按钮的颜色将变为红色,再次按下将使其变为灰色。
我至今是,我做Social Bar一个纯粹的成分,它有它自己state:commentCount,liked,likeCount(liked表示该用户是否喜欢这个职位之前,如果是这样,liked= TRUE,因此,颜色like按钮,最初将红,在按下按钮,liked和likeCount特性将相应改变)。
我的问题是,当用户按下帖子时,我会将他们带到另一个页面,他们可以在其中查看帖子中的评论,如下所示:

您可以在此Post Content页面中看到,用户也可以“喜欢”该帖子。如果用户决定“喜欢”该帖子(like按钮将为红色),则like第一张图片中的按钮也应进行更新。我应该如何实施呢?目前,我正在使用redux,只要我“喜欢”帖子,就将帖子的“广播” postId到every Social Bar,如果id匹配,则更新like按钮。是的,它可以工作,但是,每当我按下like按钮时,颜色更改大约需要1秒钟。我想要的是按钮立即更改,例如Twitter和Facebook。我怎么做?
react-native ×5
swift ×3
ios ×2
javascript ×2
reactjs ×2
redux ×2
animation ×1
base64 ×1
c ×1
firebase ×1
image ×1
react-redux ×1
uitableview ×1
xcode ×1
xv6 ×1